【发布时间】:2017-12-26 17:29:43
【问题描述】:
我在 xampp 上本地运行的 PHP 站点上的会话存在问题。我有一个登录页面,它创建一个会话并重定向到登录区域。在登录区域中,检查 1) 会话变量是否为空,以及 2) 信息是否与数据库匹配。
登录时,第一步失败,所以会话变量为空。检查的具体代码如下:
if(!empty($this->session->userdata['auth'])){
return true;
}else{
return false;
}
我从登录页面被发送到登录区域,所以我认为它至少在重定向我之前尝试创建会话,但我不确定如何检查以确定。
我最近在我的计算机上重新安装了操作系统和所有程序,包括 xampp,所以我假设问题就在那里。这个确切的代码在远程服务器上运行良好,并且在我在 xampp 中的旧本地系统上运行良好。
代码用CodeIgniter编写并加载会话库。
- PHP 版本:7.1.4
- CodeIgniter 版本:3.1.0
- Xampp 版本:3.2.2
来自 config.php 的会话变量:
$config['sess_driver'] = 'files';
$config['sess_cookie_name'] = 'ci_session';
$config['sess_expiration'] = 7200;
$config['sess_save_path'] = sys_get_temp_dir();
$config['sess_match_ip'] = FALSE;
$config['sess_time_to_update'] = 300;
$config['sess_regenerate_destroy'] = FALSE;
来自 config.php 的 Cookie 变量:
$config['cookie_prefix'] = '';
$config['cookie_domain'] = '';
$config['cookie_path'] = '/';
$config['cookie_secure'] = FALSE;
$config['cookie_httponly'] = FALSE;
编辑:
这是会话的设置方式:
$sessionArr = array(
'userId'=> $userDetails->userId,
'username'=> $userDetails->username,
'email'=> $userDetails->email,
'userType'=> $userDetails->userType
);
$this->session->set_userdata('auth',$sessionArr);
【问题讨论】:
-
嗨,如果你 read doc 你可以这样做
if(!is_null($this->session->auth)){//exist}else{//redirect} -
感谢您的回答!我现在尝试了这段代码,我遇到了同样的问题。我认为问题在于会话没有正确保存在我的本地主机上,因为它在远程主机上运行没有问题,但我不是 100% 确定。
-
为什么不检查 cookie 是否被发送/返回,是否创建了会话文件,是否有 php 引发的任何错误或警告?
-
我现在知道正在创建会话文件。我没有收到 PHP 的任何错误或警告,除非我强制脚本通过测试。然后我收到警告说我正在“尝试获取非对象的属性”,因为会话是空的。
标签: php codeigniter session xampp localhost