我已经在codeigniter项目中创建了一个登录系统,它在Firefox中工作正常,但在Chrome,数据提取和会话设置中不起作用,但是当此代码将控件重定向到admin / dashboard时,我们再次检查会话数据。如果会话数据不存在那么代码将重定向用户再次登录............我的代码在下面,我不知道在codeigniter中这个会话/ cookie有什么问题。
$data = array(
'user_id' => $user->id,
'name' => $user->name,
'user_type' => $user->type,
'username' => $user->username,
'is_logged_in' => true
);
$this->session->set_userdata($data);
//echo "user ".$this->session->userdata("username"); exit;
redirect("admin/dashboard", "location");
我搜索了很多但没有人在这种情况下工作,比如在配置文件中更改“ cookie_domain ”但没有发生任何事情....
答案 0 :(得分:18)
我也遇到过这种情况并通过将会话到期时间增加到一天来修复它。
更新
由于用户和网络服务器位置的时区之间的差异,例如发生此问题,例如我住在巴基斯坦,比美国时区早10个小时,我的服务器在美国。我在巴基斯坦时间17/10/2012 14:00请求该页面。美国的时间是17/10/2012 4:00,因为网络服务器在美国,会话到期时间设置为2小时,服务器发送的cookie设置为在17/10/2012 6:00到期。现在,浏览器会与您当地的电脑时间进行交互,并且它会在17/10/2012 14:00获得时间,因此它会删除cookie,或者您的cookie始终会根据您的请求进行刷新。因此最好将会话期限设置为1天,因为新西兰和美国之间的最大时区差异是17小时(我不确定差异可能是我错了)。所以你的cookie至少会活7个小时
答案 1 :(得分:2)
只是为了增加我的经验,我正在使用Codeigniter 2.1.4,
问题:Chrome上的会话持续时间不超过几分钟,或者在执行ajax请求时被注销。 我尝试了几种方法:(更改了sess_cookie_name,更长的sess_expiration时间)。
我刚刚发现将sess_encrypt_cookie设置为FALSE修复了chrome注销问题。
$config['sess_encrypt_cookie'] = FALSE;
不确定原因,可能是chrome上的cookie长度问题(据我所知,加密会增加很多字符串长度)。
我知道加密会增加额外的安全性,但据我所知,存储在cookie中的数据并不敏感。
希望它有所帮助!
答案 2 :(得分:1)
我在config.php
中将sess_match_useragent参数更改为false$config['sess_match_useragent'] = FALSE;
谷歌浏览器的问题已经解决。
答案 3 :(得分:0)
您是否检查过您是否存储了较长时间的会话并且没有提前销毁。或者可能与Chrome设置接受会话和cookie数据有关,因为codeigniter中没有这样的代码可以使用Firefox和它不适用于chrome.Also确保你自动加载你的'会话'库。
答案 4 :(得分:0)
Shayan Husaini完全回答我遇到了同样的问题,我通过更改
解决了这个问题$config['sess_expiration'] = 8600;
这是24小时内的秒数,是2小时内的秒数
$config['sess_expiration'] = 7200;
我住在巴基斯坦并使用美国的服务器,所以这个问题就出现了。
谢谢Shayan,这是非常有帮助的。
答案 5 :(得分:0)
我遇到了同样的问题,最后通过使用最新版本的Codeigniter 2.1.4版本的sql结构更新会话数据库表来解决问题。
CREATE TABLE IF NOT EXISTS `ci_sessions` (
session_id varchar(40) DEFAULT '0' NOT NULL,
ip_address varchar(45) DEFAULT '0' NOT NULL,
user_agent varchar(120) NOT NULL,
last_activity int(10) unsigned DEFAULT 0 NOT NULL,
user_data text NOT NULL,
PRIMARY KEY (session_id),
KEY `last_activity_idx` (`last_activity`)
);
另请注意,如果在config / database.php中配置了多个数据库,则会话表使用默认配置的数据库的会话表。
答案 6 :(得分:0)
解决了,如果cookie的指定域是localhost,CodeIgniter有一些问题,我已经将具有真实域名结构的假域设置到hosts文件中并且它可以工作。
答案 7 :(得分:0)
我知道这是一个迟到的答案,但如果您正在寻找一个好的解决方案,那么它是: 使用此代码作为注销代码:
$this->session->sess_destroy();
这将确保删除会话" ci_session"这是您无法保存新会话的主要原因,希望有所帮助
答案 8 :(得分:0)
检查您的服务器php版本,如果其7.x更改为5.6则对我有效
答案 9 :(得分:0)
我遇到了同样的问题,可以通过在CodeIgniter框架的/application/config/config.php中更改$config['sess_time_to_update'] = 3;
的值来解决该问题。
答案 10 :(得分:0)
我也遇到过同样的问题。但我已经通过在 $config['cookie_path'] 设置适当的值来修复它。如果您的项目从域的子文件夹运行。然后请将子文件夹名称设置为 $config['cookie_path'];
假设你的项目 url : https://example.com/demo1/ 那么 $config['cookie_path'] 应该像 $config['cookie_path'] = '/demo1/'