php - Codeigniter 3 - session 不工作

标签 php codeigniter session frameworks

我最近按照 codeigniter 的 website 的更新过程将表格 2.2.x 更新为 3.0.0 。 我对新的 session 库有真正的问题 - 这就是问题所在。

我们有一个依赖于子域和用户/密码凭据的登录部分,将为您提供来自管理员/经销商/客户/用户的某些权限

为了确定用户的正确权限,我们构建了一个客户库(位置:应用程序/库),我们将其称为 Session_management,该库不会扩展核心 SESSION 驱动程序/库,并且从来没有也没有扩展对于另一个类,这个库也是自动加载的,在 CI 3.0.0 之前一切都工作正常。

首先,Session_management 所做的是 __construct()

$this->CI =& get_instance();
$this->CI->load->model('users');
$this->CI->load->model('clients');
$this->CI->load->model('sessions');
$this->CI->load->driver('session');
$this->CI->load->library('password_hash');
$this->CI->load->helper('url');

$this->users = $this->CI->users;
$this->clients = $this->CI->clients;
$this->sessions = $this->CI->sessions;
$this->session = $this->CI->session;
$this->password_hash = $this->CI->password_hash;

在 CI 3.0.0 之前,我在使用时没有任何问题

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

但是由于某种未知的原因(对我来说)我必须通过驱动程序加载它

$this->CI->load->diver('session');

如果有人能解释为什么我必须这样做,那就太好了。

当用户提交其用户/密码凭据时,将请求 CONTROLLER session /登录,该 session 首先运行表单验证,如果一切顺利,则调用 Session_management 登录方法。

$success = $this->session_management->login
  ($this->input->post('email'), $this->input->post('password'));

在 Session_management 类的 LOGIN 方法中,使用

设置一堆 session
$this->session->set_userdata();

$this->session->set_userdata('user_id', 0);
$this->session->set_userdata('user_name', '');
$this->session->set_userdata('client_id', 0);
$this->session->set_userdata('client_administrator', 0);
$this->session->set_userdata('reseller_administrator', 0);

但是,当我 var_dump() 其所有 session 数据的 session 时,它什么都没有,我不明白为什么会这样,除了配置中的 protected 字段之外,没有 session 数据,我已经对其进行了双重检查和三次检查,工作正常,我的 sess_save_path 正确存储 session 文件,并且其余的 sess 配置也正确。

$config['sess_driver'] = 'files';
$config['sess_cookie_name'] = 'ci_session';
$config['sess_expiration'] = 7200;
$config['sess_save_path'] = '/Users/******/Sites/********/tmp';
$config['sess_match_ip'] = FALSE;
$config['sess_time_to_update'] = 300;
$config['sess_regenerate_destroy'] = FALSE;

这是我本地 OS X iMac 上的一个开发网站,正如我所说,在 CI 3.0.0 之前一切都工作正常。

只是在我收到回复之前添加“你需要使用”

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

我有“HAD”将其加载为驱动程序,我别无选择,我已阅读文档并了解如何初始化 session library

如果我尝试将其作为库加载

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

这就是我得到的

A PHP Error was encountered

Severity: Notice
Message: Undefined property: Session::$session
Filename: libraries/Session_management.php
Line Number: 38

供您引用:第 38 行是:

$this->session = $this->CI->session;

这是在尝试加载 session 库之后

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

还要在此消息中添加以下内容:数据库 session /文件 session 。 数据库 session 是我的第一个选择,修改了数据库列和索引以适应 CI 3.0.0,正如文档提到的那样,当我更改配置以使用数据库时, session 过去和现在都存储在数据库表中,但是读取性能差异在高负载下的文件 session 与数据库 session 之间,文件 session 将胜过数据库 session ,并且由于我正在创建的网站/平台将处于高负载下,因此数据库 session 不是前进的方向。

请注意:该网站在 subdomain.domain.*** 结构下运行,其中子域名在公司注册时注册为公司名称,即

mycompany.mywebsiteurl.com
anothercompany.mywebsiteurl.com

如前所述 - 在我更新到 CI 3.0.0 之前,它运行良好。

我还可以补充一下:我已经检查了我的日志文件,我正在运行 tail -f 进行实时日志更新 - 并且它没有看到任何日志问题。

任何帮助、信息或任何可能让我朝着正确方向前进的事情都将不胜感激。

我还有posted on the CI forum .

最佳答案

带有必要文件和配置传输的 CI 3.0.0 的新副本并没有解决我的问题。

问题的全部原因似乎是我有一个名为 Session.php 的 Controller ,其名称与驱动程序文件相同。

当CI(Codeigniter)调用时

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

在 CI 知道您想要实际加载 CI_Session 类之前,需要进行一些检查... class_exists('Session') 返回 TRUE 并在那里停止以避免 fatal error 。

希望这对其他人也有帮助。

关于php - Codeigniter 3 - session 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31070010/

相关文章:

git - 将 GIT 用于在多个位置具有目录的项目

php - 如何在codeigniter中使用sendgrid api库作为第三方库

java - 如何使用 zk 框架创建 session 和基于角色的访问

javascript - 使用表格的先前滚动条位置重新加载页面

php - 为什么当我使用双引号时 PHP 中的 printf() 不工作?

php - Cron 作业在 Google Appengine 中使用 CodeIgniter 失败

php - 当 php session 超时时执行一些事件

java - 跟踪用户是否在无状态 Web 应用程序中登录?

php - Zend Framework 1.x 和 2.x,它们的兼容性如何?

javascript - AJAX 文件上传显示 PHP 输出而不是停留在页面上