9

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

4

12 回答 12

19

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

更新

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


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

于 2012-10-16T09:04:52.647 回答
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 中的数据并不敏感。

希望能帮助到你!

于 2013-09-11T00:41:51.470 回答
1

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

$config['sess_match_useragent'] = FALSE;

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

于 2015-03-18T04:25:05.360 回答
0

I know this is a late answer but if you're looking for a good solution here it is: use this code as the logging out code:

$this->session->sess_destroy();

This will insure removal of session "ci_session" which is the main reason you can't save a new session, hope it helps

于 2015-04-01T23:13:46.360 回答
0

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

于 2012-10-16T07:02:45.330 回答
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 中配置了多个数据库,则会话表使用默认配置数据库的会话表。

于 2014-06-06T18:33:17.817 回答
0

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

$config['sess_expiration'] = 8600;

这是 24 小时内的秒数,是 2 小时内的秒数

$config['sess_expiration'] = 7200;

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

谢谢Shayan,这是很大的帮助。

于 2013-01-29T10:42:01.137 回答
0

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

于 2015-03-24T17:54:42.300 回答
0

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

于 2020-08-08T00:37:13.040 回答
0

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

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

于 2021-03-18T05:35:12.883 回答
0

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

于 2019-05-15T05:57:04.330 回答
0

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

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

于 2021-11-06T08:16:24.653 回答