我正在为我的应用程序使用codeigniter
我的问题是会话即使用户在网站上处于活动状态也会过期。
这些是会话设置..我正在使用数据库会话
$config['sess_cookie_name'] = 'ci_session';
$config['sess_expiration'] = 7200;
$config['sess_encrypt_cookie'] = FALSE;
$config['sess_use_database'] = TRUE;
$config['sess_table_name'] = 'edu_sessions';
$config['sess_match_ip'] = FALSE;
$config['sess_match_useragent'] = TRUE;
$config['sess_time_to_update'] = 300;
任何解决方案。
帮助我,我必须解决它
这是codeigniter forum link
答案 0 :(得分:12)
我遇到CI会话随机到期的问题。您是否有加载会话库的AJAX或动态资源?如果是这样,想象一下这种情况:
我提交了一个ajax请求(使用cookie传递我的CI会话ID),然后返回结果,但我还提交了一些其他请求(加载动态图像,另一个AJAX请求等)紧接着第一个请求。第一个请求可能会触发300秒“更新时间”事件,并传回一个新cookie,但附加请求是发送旧会话ID,对吗?
所以,CodeIgniter说“嘿,你不能这样做”并创建一个新会话,使两个cookie无效,我的浏览器现在不知道该怎么做。
这是我在一段时间后发布的论坛链接,其中包含更多细节: http://codeigniter.com/forums/viewthread/172415/
答案 1 :(得分:3)
正如第一个答案中所提到的,会话库中存在一种竞争条件,此后在最新版本的CodeIgniter中有所缓解,包括'develop'分支。这实现了对会话轮换的isAjax检查,但它并没有真正解决潜在的问题。
答案 2 :(得分:2)
你确定会话被破坏了吗?我认为它不是按照假设进行更新,而是在每个页面请求上创建一个新的。 (常见的Codeigniter设置问题)
这是我的建议:
仔细检查您的Application / Config / config.php文件,以确保如果您在主目录中托管该站点,会话域的部分就是这样:
$config['cookie_prefix'] = "";
$config['cookie_domain'] = "yourdomain.com";
$config['cookie_path'] = "var/sessions/";
$config['cookie_secure'] = FALSE;
并且如果您将站点托管在子目录中,那就像这样:
$config['cookie_prefix'] = "";
$config['cookie_domain'] = "yourdomain.com";
$config['cookie_path'] = "siteSubDirectory/var/sessions/";
$config['cookie_secure'] = FALSE;
并确保通过将其权限修复为755左右来确保2个目录是可写的,我强烈建议您启用数据库会话,它更安全,并通过检查会话表帮助您找出真正的问题。祝你好运:)
答案 3 :(得分:2)
我将为此问题添加解决方法。 如果进行了ajax调用,则不要更新会话 通过将此文件添加到libraries文件夹来扩展会话类:
class MY_Session extends CI_Session {
// --------------------------------------------------------------------
/**
* sess_update()
*
* @access public
* @return void
*/
public function sess_update()
{
$CI =& get_instance();
if ( ! $CI->input->is_ajax_request())
{
parent::sess_update();
}
}
}
答案 4 :(得分:1)
只需将ci_sessions表编码更改为MyISAM:
ALTER TABLE
{ci_sessions {1}}