Codeigniter 3 - 会话不工作
Posted
技术标签:
【中文标题】Codeigniter 3 - 会话不工作【英文标题】:Codeigniter 3 - Session not working 【发布时间】: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 进行实时日志更新 - 它没有看到任何日志问题。
任何帮助、信息或任何可能使我朝着正确方向前进的东西都将不胜感激。
我也有posted on the CI forum。
【问题讨论】:
【参考方案1】:带有必要文件和配置的 CI 3.0.0 新副本无法解决我的问题/问题。
问题的全部原因似乎是我有一个名为 Sesssion.php 的控制器,它的名称与驱动程序文件相同。
当 CI (Codeigniter) 调用时
$this->load->library('session')
在 CI 知道您要实际加载 CI_Session 类之前进行了一些检查... class_exists('Session') 返回 TRUE 并停在那里以避免致命错误。
希望这对其他人也有帮助。
【讨论】:
那么你如何解决你的问题呢?你可以根据它编辑你的答案吗?以上是关于Codeigniter 3 - 会话不工作的主要内容,如果未能解决你的问题,请参考以下文章