CodeIgniter 会话类在 Chrome 中不起作用

Posted

技术标签:

【中文标题】CodeIgniter 会话类在 Chrome 中不起作用【英文标题】:CodeIgniter session class not working in Chrome 【发布时间】:2012-10-06 03:43:34 【问题描述】:

我在 codeigniter 项目中创建了一个登录系统,该系统在 Firefox 中运行良好,但在 Chrome 中无法运行,数据获取并设置为会话,但是当此代码将控制重定向到管理员/仪表板时,我们再次检查会话数据.如果会话数据不存在,那么代码将重定向用户再次登录............我的代码在下面,我不知道codeigniter中的这个会话/cookies有什么问题。?

        $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”但什么也没发生......

【问题讨论】:

你说在FF里没问题。这让我假设你的 chrome 没有存储 cookie。检查一下 ***.com/q/4268823/984422 但我的 chrome 为其他网站(如 facebook 等)存储 cookie... @W.Kristianto,我已经检查了所有方法,比如更改 cookie_domain 名称等,但什么也没发生...... 【参考方案1】:

我也遇到过这种情况,并通过将会话到期时间延长至一天来解决此问题。

更新

为什么它可以通过延长会话到期来工作?

此问题是由于用户和网络服务器位置的时区之间的差异而发生的,例如我住在比美国时区早 10 小时的巴基斯坦,我的服务器在美国。我在巴基斯坦时间 2012 年 10 月 17 日 14:00 请求该页面。美国的时间是 2012 年 10 月 17 日 4:00,因为网络服务器在美国并且会话到期设置为 2 小时,服务器发送的 cookie 设置为 2012 年 10 月 17 日 6:00 到期。现在浏览器与您的本地电脑时间交互,它的时间是 2012 年 10 月 17 日 14:00,因此它会删除 cookie 或您的 cookie 总是根据您的请求刷新。因此,最好将会话到期设置为 1 天,因为新西兰和美国之间的最大时区差异是 17 小时(我不确定差异可能是我错了)。所以你的 cookie 至少可以存活 7 个小时

【讨论】:

是的,它现在可以工作了,通过将到期时间延长到一天...... :) 但是没有这个如何管理它,你尝试一下吗?无论如何,谢谢。 当您的时区与网络主机时区不同时会出现此问题,因此 1 天是安全的。 @Shayanhusaini 但是当我们使用 localhost 那么为什么要面对这个问题 @kushalsuthar 我已经回答了会议中最常见的问题。浏览器设置有很多可能性【参考方案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 中的数据并不敏感。

希望对你有帮助!

【讨论】:

【参考方案3】:

我在 config.php 中将 sess_match_useragent 参数更改为 false

$config['sess_match_useragent'] = FALSE;

谷歌浏览器的问题也解决了。

【讨论】:

【参考方案4】:

您是否检查过您是否将会话存储时间较长并且它没有提前销毁。或者可能与接受会话和 cookie 数据的 chrome 设置有关,因为 codeigniter 中没有这样的代码可以运行Firefox,它不能在 chrome 上运行。另外请确保您正在自动加载您的“会话”库。

【讨论】:

是的,我已经自动加载了我的会话库,除了 chrome 之外一切正常...【参考方案5】:

Shayan Husaini 的完美答案我遇到了同样的问题,我通过更改解决了它

$config['sess_expiration'] = 8600;

24 小时是秒,2 小时是秒

$config['sess_expiration'] = 7200;

我住在巴基斯坦,使用美国的服务器,所以会出现这个问题。

感谢Shayan,帮了大忙。

【讨论】:

【参考方案6】:

我遇到了同样的问题,最后通过使用最新版本的 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中配置了多个数据库,会话表使用默认配置的数据库的会话表。

【讨论】:

【参考方案7】:

已解决,如果为 cookie 指定的域是 localhost,CodeIgniter 会出现一些问题,我在 hosts 文件中设置了一个具有真实域名结构的假域,并且它可以工作。

【讨论】:

【参考方案8】:

我知道这是一个迟到的答案,但如果您在这里寻找一个好的解决方案,那就是: 将此代码用作注销代码:

$this->session->sess_destroy();

这将确保删除会话“ci_session”,这是您无法保存新会话的主要原因,希望对您有所帮助

【讨论】:

【参考方案9】:

检查您的服务器 php 版本,如果它的 7.x 更改为 5.6 它对我有用

【讨论】:

【参考方案10】:

我遇到了同样的问题,我可以通过更改 CodeIgniter 框架的 /application/config/config.php 中 $config['sess_time_to_update'] = 3; 的值来解决问题。

【讨论】:

【参考方案11】:

我也遇到过同样的问题。但是我通过在 $config['cookie_path'] 设置适当的值来修复它。如果您的项目从您域的子文件夹运行。那么请将子文件夹名称设置为 $config['cookie_path'];

假设您的项目网址:https://example.com/demo1/ 然后 $config['cookie_path'] 应该像 $config['cookie_path'] = '/demo1/'

【讨论】:

【参考方案12】:

尝试更新到最新版本。我使用的是 3.1.9 版本,会话没有问题。

https://codeigniter.com/userguide3/installation/downloads.html

【讨论】:

以上是关于CodeIgniter 会话类在 Chrome 中不起作用的主要内容,如果未能解决你的问题,请参考以下文章

如何使 Codeigniter 会话与边缘一起工作?

关闭浏览器时如何删除用于注销的 codeigniter 会话?

如何在 Codeigniter 中检查是不是设置了会话?

Codeigniter 3 - 会话库

Codeigniter 3 - 从外部 Codeigniter 安装访问会话

PHP:在视图中显示会话变量:CodeIgniter