【问题标题】:CodeIgniter 3 Session not working on SafariCodeIgniter 3 会话在 Safari 上不起作用
【发布时间】:2015-10-04 11:48:28
【问题描述】:

当用户从 PC 或平板电脑使用 Safari 时,我遇到了 CodeIgniter 会话问题。在 Google Chrome 和 Firefox 开发版上运行良好,我认为问题与 Safari 有关。

这是我登录成功后的会话代码:

$logged_in = array(
    'username' => $out[0]['username'],
    'user_id' => $out[0]['id'],
    'logged_in' => TRUE
);
$this->session->set_userdata($logged_in);
$this->session->set_flashdata('user_data', $logged_in);
redirect('social/userprofile/' . $out[0]['username']);

问题是当用户尝试使用 Safari 登录网站时,他会在登录页面上再次被重定向。

这是因为:

public function check_logged($user2=""){
     $check_session = $this->session->userdata('user_id');
     if(!$check_session) {
       redirect('social/index');
     }
}

尝试使用会话登录,将会话保存为文件,我看到会话创建了 4 个文件,其中 3 个为空,一个包含会话数据的正确信息。

有什么建议吗?

【问题讨论】:

  • 你的错误是什么?
  • 用户再次被重定向到登录页面,因为在重定向到用户配置文件期间没有会话数据。
  • 请使用登录功能更新您的代码。也是您检查会话 cookie 的用户配置文件。
  • 问题不在于代码问题在于Safari和CI Session。我不知道为什么..所有代码在 Chrome 和 Firefox 下都能完美运行,但在 Safari 上不要设置会话。
  • 你如何在那个方法中使用$user2参数?

标签: php codeigniter session safari


【解决方案1】:

几件事,

CodeIgniter $this->session->userdata('user_id') 为此返回 Boolean,因此您无法检查其是否为 。您必须检查它是 true 还是 false

改变这个:

public function check_logged($user2=""){
  $check_session = $this->session->userdata('user_id');
     if(empty($check_session)) {
       redirect('social/index');
}

public function check_logged($user2=""){
  $check_session = $this->session->userdata('user_id');
     if(!$check_session) {
       redirect('social/index');
}

【讨论】:

  • 是的,我已经更新了这部分代码,但问题在 Safari 上仍然存在
  • 我还将会话保存为文件。使用 Chrome 和 Firefox 会话已保存,但使用 Safari 会话为空
  • 是的,没关系,我刚刚看到 Chrome 正在生成 1 个保存会话信息数据的文件,Safari 正在生成 3、4 或更多的 5 个文件 1 包含所有会话数据,其他文件为空..
  • 我也看到一些有同样问题的人已将 hwclock 设置为正确的数据和时间,但我的是正确的。我快疯了,我是唯一有这个问题的人 ??
  • @mds 再次转到 config.phpsess_match_useragent 使其为假;
猜你喜欢
  • 2014-03-14
  • 1970-01-01
  • 1970-01-01
  • 2015-09-13
  • 1970-01-01
  • 2015-11-17
  • 2017-02-13
相关资源
最近更新 更多