【发布时间】:2015-09-13 05:17:39
【问题描述】:
我最近按照 codeigniter 的 website 中的更新程序将表单 2.2.x 更新为 3.0.0。 我在使用新的会话库时遇到了真正的问题 - 这是问题所在。
我们有一个登录部分,它依赖于子域和用户/密码凭据,将为您提供来自 ADMIN / RESELLER / CLIENT / USER 的某些权限
为了确定用户的正确权限,我们构建了一个我们称之为 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_management 登录方法。
$success = $this->session_management->login
($this->input->post('email'), $this->input->post('password'));
在 Session_management 类的 LOGIN 方法中,使用
设置了一堆会话$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() 对其所有会话数据的会话时,它什么都没有,我不知道为什么会这样,除了我的受保护字段构成配置之外,没有会话数据存在,我已经对其进行了双重检查和三重检查,并且工作正常,我的 sess_save_path 正确存储会话文件,其余的 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');
我有“必须”将其加载为驱动程序,我别无选择,我已阅读文档并了解如何初始化会话 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;
这是在尝试加载会话库之后
$this->CI->load->library('session');
还要在此消息中添加回复:数据库会话/文件会话。 数据库会话是我的第一个选择,当我更改配置以使用数据库时,我已经修改了数据库列和索引以适应 CI 3.0.0,并且会话已经和正在存储在数据库表中,但是读取性能差异在高负载下的文件会话与数据库会话之间,文件会话将执行数据库会话,并且由于我正在创建的网站/平台将处于高负载状态,因此数据库会话不是前进的方向。
注意:该网站在 subdomain.domain.*** 结构下运行,其中子域在公司注册时注册为公司名称,即
mycompany.mywebsiteurl.com
anothercompany.mywebsiteurl.com
如前所述 - 在我更新到 CI 3.0.0 之前,它运行良好。
我还要补充一点:我已经检查了我的日志文件,我正在运行 tail -f 进行实时日志更新 - 它没有看到任何日志问题。
任何帮助、信息或任何可能使我朝着正确方向前进的东西都将不胜感激。
【问题讨论】:
标签: php codeigniter session frameworks