CodeIgniter会话类在Chrome中不起作用

时间:2012-10-16 05:18:05

标签: codeigniter session google-chrome cookies

我已经在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 ”但没有发生任何事情....

11 个答案:

答案 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/'