我有关于Codeigniter会话的问题。当我登录到我们的系统时,会设置会话。在此会话中,“user_id”也设置。在几次重定向后,我的“user_id”Session变量为null(无值)。
然后由于user_id的空值而重定向到登录页面。为什么会出现这个问题?
请参阅以下config.php文件
$config['sess_cookie_name'] = 'ci_session';
$config['sess_expiration'] = 7200;
$config['sess_expire_on_close'] = FALSE;
$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;
$config['cookie_prefix'] = "";
$config['cookie_domain'] = "";
$config['cookie_path'] = "/";
$config['cookie_secure'] = FALSE;
$config['csrf_protection'] = FALSE;
$config['csrf_token_name'] = 'csrf_test_name';
$config['csrf_cookie_name'] = 'csrf_cookie_name';
$config['csrf_expire'] = 7200;
请帮我解决这个问题。 !
答案 0 :(得分:1)
答案 1 :(得分:1)
您没有提供有关您的应用程序的大量信息,但如果重定向之间有很多ajax请求,您可能会遇到经典的CI 2错误,即存在竞争条件,无论何时ajax都会有效地重置用户会话请求是在会话轮换窗口期间提出的。
CodeIgniter将会话存储在由session_id字段索引的表中。这是在会话创建和轮换时随机生成的唯一标识符。 session_id在每次请求后作为cookie发送到浏览器,这将覆盖存储在cookie中的任何session_id。当系统在客户端和服务器之间只发送一个请求时,该系统在正常操作期间运行良好。在正常操作期间,将在客户端和服务器之间交换相同的cookie。在会话轮换时,服务器将向客户端发送一个新cookie,该cookie将存储它并在下一个请求时将新cookie重新发送回服务器。这也可以正常使用。
什么不起作用是服务器在会话轮换期间收到两个同时请求(同时定义为在收到所有其他正在进行的请求之前发送到服务器的请求)。
This link here彻底解释了这一点,如果这是你的情况,那么你可以在那里找到解决方法。
问题的存在是因为浏览器发出ajax请求的方式(或者 至少我们制作ajax请求的方式)和CodeIgniter的方式 处理会话轮换。
PS。它的Codeigniter不是codeignitor:)