我是php codeigniter会话的新手。我有关于我的网站上的会话过期的问题。 我在我们的网站页面上使用ajax coll来广告div,并添加到购物车功能以在同一页面上添加多个产品。但由于会议在审批后过期,我的购物车添加的产品是空的。 4-5分钟。 关于这个问题,我做了很多研究。我认为我的网站会话已经过期,因为同时更新了ajax并更新了会话ID。但我不确定。
我已将config.php文件配置为 -
$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_sessions)。
请给我一个解决方案来解决此问题。
感谢。
答案 0 :(得分:5)
去年CI中有一个session.php补丁解决了ajax +会话过期问题,请看下面的补丁LINK HERE
答案 1 :(得分:3)
请确保,有两种选择。
1.用this one
替换system\libraries\Session.php
2.扩展您的原始session.php,如@undefined answer。
如果你没有1,那么不做2号,反之亦然。
我不知道更多。祝你好运!。
答案 2 :(得分:1)
这是一个CI错误,会在发送Ajax请求时销毁会话,您可以扩展CI_Session类并仅在请求不是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);
}
}
}