Php 为什么使用codeigniter会话会自动过期?如果在网页上使用ajax调用
我是php codeigniter会话的新手。我的站点上有一个关于会话过期的问题。 我正在使用AJAXColl在我们的网站页面上为老顶广告div添加内容,并添加到购物车功能,以便在同一页面上添加多个产品。但我的购物车添加的产品是空的,因为会话在批准后过期。4-5分钟。 我对这个问题做了很多研究。我想我的站点会话已经过期了,因为我需要冷却ajax并同时更新会话id。但我不确定这一点 我已将config.php文件配置为-Php 为什么使用codeigniter会话会自动过期?如果在网页上使用ajax调用,php,jquery,ajax,codeigniter,session,Php,Jquery,Ajax,Codeigniter,Session,我是php codeigniter会话的新手。我的站点上有一个关于会话过期的问题。 我正在使用AJAXColl在我们的网站页面上为老顶广告div添加内容,并添加到购物车功能,以便在同一页面上添加多个产品。但我的购物车添加的产品是空的,因为会话在批准后过期。4-5分钟。 我对这个问题做了很多研究。我想我的站点会话已经过期了,因为我需要冷却ajax并同时更新会话id。但我不确定这一点 我已将config.php文件配置为- $config['sess_cookie_name'] = 'ci_sess
$config['sess_cookie_name'] = 'ci_session';
$config['sess_expiration'] = 0;
$config['sess_encrypt_cookie']= FALSE;
$config['sess_use_database']= TRUE;
$config['sess_table_name'] = 'ci_sessions';
$config['sess_match_ip'] = FALSE;
$config['sess_match_useragent']= TRUE;
$config['sess_time_to_update'] = 300;
我还创建了表(ci_会话)
请给我一个解决方案来解决这个问题。
谢谢。去年CI中session.php有一个补丁解决了ajax+会话过期问题,请看下面的补丁去年CI中session.php有一个补丁解决了ajax+会话过期问题,请看下面的补丁这是一个CI bug,当发送Ajax请求时,会话将被销毁。只有当请求不是Ajax时,才可以扩展CI_会话类并调用
sess_update
class MY_Session extends CI_Session
{
function sess_update()
{
// Listen to HTTP_X_REQUESTED_WITH
if (isset($_SERVER['HTTP_X_REQUESTED_WITH']) && $_SERVER['HTTP_X_REQUESTED_WITH'] !== 'XMLHttpRequest') {
parent::sess_update();
}
}
}
要加载MY_Session
类,可以将此函数添加到config
文件中:
function __autoload($classname) {
if (strpos($classname, 'CI_') !== 0) {
$file = APPPATH . 'libraries/' . $classname . '.php';
if (file_exists($file) && is_file($file)) {
@include_once($file);
}
}
}
这是一个CI错误,当发送Ajax请求时会话会被破坏,您可以扩展CI_会话类,仅当请求不是Ajax时才调用
sess_update
class MY_Session extends CI_Session
{
function sess_update()
{
// Listen to HTTP_X_REQUESTED_WITH
if (isset($_SERVER['HTTP_X_REQUESTED_WITH']) && $_SERVER['HTTP_X_REQUESTED_WITH'] !== 'XMLHttpRequest') {
parent::sess_update();
}
}
}
要加载MY_Session
类,可以将此函数添加到config
文件中:
function __autoload($classname) {
if (strpos($classname, 'CI_') !== 0) {
$file = APPPATH . 'libraries/' . $classname . '.php';
if (file_exists($file) && is_file($file)) {
@include_once($file);
}
}
}
只要确定,有两个选择 1.将
system\libraries\Session.php
替换为
2.像@undefined answer一样扩展原始session.php
如果你做第一,那么不要做第二,反之亦然
我只知道这些。祝你好运 只要确定,有两种选择 1.将
system\libraries\Session.php
替换为
2.像@undefined answer一样扩展原始session.php
如果你做第一,那么不要做第二,反之亦然
我只知道这些。祝你好运 codeigniter什么版本?@Charlie,我使用的是codeigniter 1.7.2。请给出这个问题的简单解决方案,因为我是codeigniter的新手。既然你是CI的新手,为什么不使用更新的版本呢?你有两个答案,仍然没有正确的解决方案??codeigniter什么版本?@Charlie,我使用的是codeigniter 1.7.2。请,给出这个问题的简单解决方案,因为我是CodeIgniter的新手。既然你是CI的新手,为什么不使用更新的版本呢?你得到了两个答案,仍然没有正确的解决方案??你愿意帮忙吗;见上面的评论。谢谢。@Charlie,我已经更新了答案。你愿意帮忙吗;见上面的评论。谢谢。@Charlie,我已经更新了答案。谢谢你,先生。我完全满意这是否有效?您的第一个选择是在system\libraries\input.php文件中添加is\u ajax\u request()。谢谢你的回复。谢谢你,先生。我完全满意这是否有效?您的第一个选择是在system\libraries\input.php文件中添加is\u ajax\u request()。谢谢你的回复。