【问题标题】:CodeIgniter session class not working in ChromeCodeIgniter 会话类在 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。检查一下
  • 但我的 chrome 为其他网站(如 facebook 等)存储 cookie...
  • @W.Kristianto,我已经检查了所有方法,比如更改 cookie_domain 名称等,但什么也没发生......

标签: codeigniter session google-chrome cookies


【解决方案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

                    【讨论】:

                      猜你喜欢
                      • 2017-02-13
                      • 2015-11-17
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      • 2020-11-22
                      相关资源
                      最近更新 更多