Php CodeIgniter 3,AJAX问题
这里我们讨论的是带有AJAX调用和会话的PHP CodeIgniter应用程序 大家好 在发布这篇文章之前,我在网上做了一些搜索 配置:Php CodeIgniter 3,AJAX问题,php,ajax,codeigniter,session,Php,Ajax,Codeigniter,Session,这里我们讨论的是带有AJAX调用和会话的PHP CodeIgniter应用程序 大家好 在发布这篇文章之前,我在网上做了一些搜索 配置: 使用加密cookie的数据库存储会话 编码点火器3.1.10 jQuery 3.1.1 PHP 5.6或7.x(同一版本) Localhost:会话或其他方面没有问题 OVH mutualise server(共享):有时它会丢失会话,这不是同一时间,我认为这是服务器端配置,但我想知道你们中的一些人是否也遇到过这个问题 问题是,如果会话丢失并出现以下错误,
- 使用加密cookie的数据库存储会话
- 编码点火器3.1.10
- jQuery 3.1.1
- PHP 5.6或7.x(同一版本)
- Localhost:会话或其他方面没有问题
- OVH mutualise server(共享):有时它会丢失会话,这不是同一时间,我认为这是服务器端配置,但我想知道你们中的一些人是否也遇到过这个问题
// Not working on AJAX calls
private function ajaxIsLogged() {
if (!$this->session->userdata('connected')) {
echo json_encode(['error' => true, 'message' => 'Session lost']);
return false;
}
}
下面是一个AJAX调用的示例
$.ajax({
type: 'POST',
url: url,
data: data,
beforeSend: function () {
$("div#divLoading").addClass('show');
},
complete: function () {
$("div#divLoading").removeClass('show');
},
success: function (res) {
// In my case when the issue occurs, ISSUE is HERE
// Trying to parse non-valid JSON
// But I don't understand why server would echo something
// The function isAjaxLogged would normally do the trick
var result = JSON.parse(res);
if (result.error) {
console.log(result.error);
// Here we can redirect to login page if ajaxIsLogged() was working
}
if (result.success) {
// Do things
}
}, error: function (err) {
console.log(err);
}
});
我在没有JSON.parse的情况下尝试了很多事情,但仍然会发生错误(没有JSON.parse的情况下,情况并不完全相同,但错误总是发生在我的控制函数之前,请享受异步:)
感谢阅读此文,如果你们中有人面临此问题??
我对CI/Sessions/Ajax的一些头痛问题进行了深入研究,有时解决方案只是一件小事
总结如下:
- 有没有一种方法可以通过CI共享/共享服务器上的会话进行欺骗
- 当会话丢失时,是否有办法对AJAX请求执行“适当的技巧”
- 试试这个
控制器:
function ajaxIsLogged() {
if (!$this->session->userdata('connected')) {
echo json_encode(['error' => false, 'message' => 'Session lost']);exit();
}else{
echo json_encode(['error' => true, 'message' => 'Session exists']);exit();
}
}
阿贾克斯:
对isLogged函数的私有函数isLogged(){if(!$this->session->userdata('connected')){if($this->input->is_ajax_request()){echo json_encode(['error'=>true,'message'=>'session lost']);exit()}else{redirect('user/login');}}}}}}你好,啊,没有想到是对codeigniter的请求。我会尝试一下,看看会发生什么,事实上,在“url”中调用的控制器仅为AJAX,因此不会为加载视图或其他内容调用它。检查此CI用户指南您好,谢谢您的回答,我将测试并查看。但为什么要更改ajax请求的类型(POST>GET),是否有任何链接?就像我说的,解决方案有时候是你没有想到的小事情,哈哈。这很奇怪,因为有时候这个条件:$此->会话->用户数据(“已连接”)已填充,但会话数据仍在此处。。。所以它不会每次都这么做!
function ajaxIsLogged() {
if (!$this->session->userdata('connected')) {
echo json_encode(['error' => false, 'message' => 'Session lost']);exit();
}else{
echo json_encode(['error' => true, 'message' => 'Session exists']);exit();
}
}
$.ajax({
type: 'GET',
url: url,
beforeSend: function () {
$("div#divLoading").addClass('show');
},
complete: function () {
$("div#divLoading").removeClass('show');
},
success: function (res) {
console.log(res);
}, error: function (err) {
console.log(err);
}
});