【问题标题】:Codeigniter 2.2 and Ion Auth losing userdata after redirectCodeigniter 2.2 和 Ion Auth 在重定向后丢失用户数据
【发布时间】:2015-09-02 20:37:15
【问题描述】:

因此,在登录时,Ion Auth 使用$this->session->user_setdata() 建立会话信息并重定向到主页。然后在 MY_Controller 中,我们使用 Ion Auth 的 logged_in() 方法,该方法使用 $this->session->userdata('identity') 检查该信息以查看用户是否已登录。

在重定向之前,所有用户数据都设置为$this->session->all_userdata() 所见,但在输入 MY_Controller 时,所有用户数据都不存在,并导致应用程序重定向回登录页面。

我在 2.1.4 上,但升级到 2.2 并且在两个版本中都发生了这种情况。

【问题讨论】:

  • 你能贴一些代码吗
  • 我希望您发布一些代码以进行更多验证
  • 所有浏览器都出现这个问题??
  • $this->session->userdata('identity');不起作用,因为新控制器不知道身份验证控制器会话。 在 application/core 目录中创建一个新的控制器父类,例如 MY_Controller。此类加载公共库/包(如 session 和 ion_auth)。您还可以自动加载库和帮助程序。

标签: php codeigniter session redirect


【解决方案1】:

我在使用Flexi Auth 时遇到了同样的问题,这完全令人抓狂。我们通过在application/config/config.php 中使用设置sess_encrypt_cookie 启用cookie 加密找到了解决方法。 (参见:Session Class)。

使用 xdebug 逐步浏览我们的应用程序,我们可以看到当 cookie 未加密时 PHP 会话正在重新生成。启用 cookie 加密会绕过框架中不断重新生成会话 ID 的代码块。该问题似乎完全包含在 CI 框架及其会话处理中。

编辑

如果有帮助,这里是我们config.php 中的会话配置:

$config['sess_cookie_name']             = 'ci_session';
$config['sess_expiration']              = 7200;
$config['sess_expire_on_close'] = FALSE;
$config['sess_encrypt_cookie']  = TRUE;
$config['sess_use_database']    = TRUE;
$config['sess_table_name']              = 'ci_sessions';
$config['sess_match_ip']                = FALSE;
$config['sess_match_useragent'] = TRUE;
$config['sess_time_to_update']  = 300;`

我们更改的设置是sess_encrypt_cookie,如前所述,加上从数据库驱动会话,sess_use_databaseTRUE。值得一提的是,我们确实在同一个 CI 应用程序中运行了 Ion Auth 和 Flexi Auth。我查看了我们的 Ion Auth 配置,它主要是库存设置。我们更改的设置与会话无关(密码长度等)。

【讨论】:

  • 这几乎解决了我的问题。我现在可以在没有登录循环的情况下重定向,但是如果我登录/注销/登录并再次尝试注销,它现在会保存我的会话,直到我手动清除缓存而不是单击注销时...叹息
猜你喜欢
  • 2015-04-13
  • 1970-01-01
  • 2013-01-06
  • 2017-05-03
  • 2012-11-15
  • 1970-01-01
  • 1970-01-01
  • 2013-02-11
  • 2012-08-17
相关资源
最近更新 更多