【问题标题】:Native PHP Session values are lost in Codeigniter原生 PHP 会话值在 Codeigniter 中丢失
【发布时间】:2019-02-10 03:39:49
【问题描述】:

我正在开发一个使用原生 PHP sessions 的项目。我将用户重定向到 Codeigniter 页面并且所有会话值都丢失​​了。 我尝试使用 Nativesession 库,它可以帮助我保留所有本机 php 会话 数据,如果我在 Codeigniter 的 index.php 中使用 session_start() 也是如此,但我收到通知消息说“A会话处于活动状态,此时您无法更改会话模块的 ini 设置”和“会话已经开始 - 忽略 session_start()

【问题讨论】:

  • 你试过 $_SESSION 吗?
  • 是的。尝试了 var_dump($_SESSION),它只存储在 Codeigniter 环境中更新的值,并且所有以前的值都没有显示(丢失)。

标签: php session session-variables codeigniter-3


【解决方案1】:

你必须像这样开始会话

将此添加到您的控制器构造函数中

$this->load->library('session')

你可以像这样使用会话

$this->session

添加数据

$this->session->set_userdata('some_key', 'some_value');

获取数据

$some_value = $this->session->userdata('some_key');

阅读文档

Codeigniter Session Management

【讨论】:

  • 谢谢,但没有帮助。我已经尝试过了,我不得不使用 session_start() 因为上述方法对我不起作用(不知何故我的本机 php 会话值丢失了)。
  • 你能在 config.php 中分享 Session 和 cookie 定义吗?
  • @BRjava $config['sess_driver'] = 'files'; $config['sess_cookie_name'] = 'ci_session'; $config['sess_expiration'] = 7200; $config['sess_save_path'] = NULL; $config['sess_match_ip'] = 假; $config['sess_time_to_update'] = 300; $config['sess_regenerate_destroy'] = FALSE;$config['cookie_prefix'] = ''; $config['cookie_domain'] = ''; $config['cookie_path'] = '/'; $config['cookie_secure'] = 假; $config['cookie_httponly'] = FALSE;
【解决方案2】:

在阅读了有关会话库在 codeigniter 中的工作原理之后,找出了问题的根本原因。

根据文档,

"加载页面时,会话类将检查用户浏览器是否发送了有效的会话 cookie。如果会话 cookie 不存在(或者它与存储在服务器或已过期)将创建并保存一个新会话。"

在我的情况下,当我使用 PHP Native 会话时,它不会为 CI 创建有效的 cookie,并且根据上述声明,CI 将创建新会话 因此旧的会话将被销毁。

有两种方法可以解决这个问题

  1. 使用@$this->load->library('session') 抑制CI 会话库 生成的警告和通知
  2. 根本不加载 CI 会话库,继续使用原生 PHP 会话。

如果有人遇到同样的问题,希望对您有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-08-13
    • 1970-01-01
    • 2013-01-05
    • 2018-07-07
    • 1970-01-01
    • 2020-04-05
    • 1970-01-01
    • 2013-06-08
    相关资源
    最近更新 更多