【问题标题】:CodeIgniter : Session does not work in google ChromeCodeIgniter:会话在谷歌浏览器中不起作用
【发布时间】:2012-04-25 06:51:50
【问题描述】:

浏览器曾经成功获取了一个 cookie(如何?什么时候?我真的不知道。我只能说在某个时间,我意识到我的网站在 chrome 中不再工作了)。现在chrome在开发工具中一直显示:“This site has no cookies”。

它在 explorer / firefox / safari 等中运行良好......

由于 CI 会话库使用 cookie,并且我的所有页面都使用会话库,我真的需要解决这个问题。

这是我的配置(数据库表存在,工作正常,通常 cookie 是加密的)

$config['sess_cookie_name']     = '[mydomain]sessions';
$config['sess_expiration']      = 60*60*24*7; // one week
$config['sess_expire_on_close'] = FALSE;
$config['sess_encrypt_cookie']  = FALSE;
$config['sess_use_database']    = TRUE;
$config['sess_table_name']      = '[mydomain]sessions';
$config['sess_match_ip']        = TRUE;
$config['sess_match_useragent'] = FALSE;
$config['sess_time_to_update']  = 300;

这是 cookie 配置

$config['cookie_prefix']    = "";
$config['cookie_domain']    = "[mydomain.com]";
$config['cookie_path']      = "/";
$config['cookie_secure']    = FALSE;

当用户登录时,它会:

$query = $this->db->get_where('user', array('id' => $logged_in_user_id));
$row = $query->row();
$this->session->set_userdata('user_id', $row->user_id);
redirect(base_url(), 'location');

当用户注销时,它会:

$this->session->sess_destroy();
redirect(base_url(), 'location');

这很简单,我想这就是应该这样做的方式吗?知道为什么它在 chrome 中不起作用,但在 firefox / explorer / safari 中却能完美运行吗?

【问题讨论】:

  • 您已将 sess_use_database 设置为 true,因此您的会话通过数据库而不是 cookie 维护

标签: php codeigniter session cookies


【解决方案1】:

尝试在这一行添加一个点:

$config['cookie_domain']    = ".[mydomain.com]";

我的配置是相同的,它适用于谷歌浏览器,但我有这些不同:

$config['sess_expiration']      = 86400;
$config['sess_encrypt_cookie']  = TRUE;
$config['sess_match_ip']        = FALSE;
$config['sess_match_useragent'] = TRUE;

我希望它有效:-)

【讨论】:

  • 感谢 jonaypelluz 的建议。我试过了,但没有用。我将 cookie_domain 留空,现在它可以工作了。浏览器已正确设置域名。看起来应该由浏览器处理...?
【解决方案2】:

在会话库顶部添加ob_start()

ob_start();
$this->load->library('Session');

并在会话破坏部分添加ob_clean()

$this->load->driver('cache');
$this->session->sess_destroy();
$this->cache->clean();
ob_clean();

【讨论】:

    【解决方案3】:

    通常你(过去我有)通过延长会话到期来解决(d)它,但我看到你的已经设置为一周。试着缩短一点? 例如:

    $config['sess_expiration'] = 8600;
    

    或者,您可以尝试关闭加密 cookie,因为我刚刚在 CI 论坛上看到其他人已通过此方法解决了该问题:

    $config['sess_encrypt_cookie'] = FALSE;
    

    希望我能帮上忙。让我知道它对你有什么好处:)

    【讨论】:

      【解决方案4】:

      转到配置,如果您在本地系统上使用,只需替换它:

      $config['cookie_prefix']    = 'your_prefix';
      $config['cookie_domain']    = 'localhost';
      $config['cookie_path']      = '/folder_name/';
      $config['cookie_secure']    = FALSE;
      $config['cookie_httponly']  = FALSE;
      

      或者如果您在服务器上使用它,只需像这样替换它:

      $config['cookie_domain']    = 'localhost';
      to
      $config['cookie_domain']    = '.localhost';
      

      希望对你有所帮助。

      【讨论】:

        猜你喜欢
        • 2011-02-15
        • 2020-04-11
        • 1970-01-01
        • 1970-01-01
        • 2012-06-13
        • 2012-10-12
        • 2016-01-25
        • 2013-10-09
        • 1970-01-01
        相关资源
        最近更新 更多