Codeigniter存在问题我无法修复。当我成功登录并创建必要的会话变量时,下一个请求中的重定向无法检索这些变量。 $ _ SESSION var没有它们!
这是当有人提交用户和密码登录时执行的代码:
$data = array(
'user' => $this->input->post('user'),
'password' => $this->input->post('password'),
);
// Trying to log in
try{
// Validation ....
// Users instance creation ....
$this->user = (...)
// Last action before the redirection
$this->session->set_userdata(array(
'user' => serialize($this->user),
'logged_in' => true,
'last_access' => time(),
'session_max_time' => config_item('app_sess_expiration'),
));
// At this point, if I do a var_dump($_SESSION), it will display all my session variables as expected.
redirect(base_url());
}
catch (Exception $e) {
// Not reaching this code
$data['error'] = $e->getMessage();
redirect_to_login();
}
现在,如果我 system / libraries / Session / Session.php 中的session_start()之后 var_dump($ _ SESSION),它将仅在重定向请求中显示:
Array
(
[__ci_last_regenerate] => 1499021453
)
我自己的会话变量丢失了!
我已经检查过每次尝试进行身份验证时,都会创建一个新的会话变量:
luis@luis-pc ~ $ ls -la /opt/lampp/temp
total 20312
drwxrwxrwx 2 daemon daemon 24576 jul 2 21:16 .
drwxr-xr-x 30 root root 4096 jun 19 22:37 ..
-rw------- 1 daemon daemon 20735126 jun 20 22:14 phpjtS2zn
-rw------- 1 daemon daemon 34 jul 2 20:50 session_myapp51697449f5b8d526ee2cce05a5149135e3c1d74f
-rw------- 1 daemon daemon 785 jul 2 21:16 session_myapp72d8e8c189283c1d5c5d4ed60d7dd58ed5d9d69c
-rw------- 1 daemon daemon 34 jul 2 21:16 session_myapp9a97c65cda1c846028fc3035abe5023a73cf974b
-rw------- 1 daemon daemon 34 jul 2 21:16 session_myappf122822e7c8887b14239eb9e97d70266d47c658b
-rw------- 1 daemon daemon 14891 jul 2 21:15 sess_50fbaf84f2b49bf7c176b8c0396c099e
我不确定文件权限是否可以执行某些操作。我为temp目录中的所有用户提供了读取权限,但是所有会话文件都是使用仅限所有者权限创建的。但是我觉得守护进程也是运行过程的拥有者,不是吗?所以应该检索会话文件。
编辑1:
这是我在config.php文件中设置的会话
$config['sess_driver'] = 'files';
$config['sess_cookie_name'] = 'session_myapp';
$config['sess_expiration'] = 0;
$config['sess_save_path'] = "/opt/lampp/temp";
$config['sess_match_ip'] = FALSE;
$config['sess_time_to_update'] = 30;
$config['sess_regenerate_destroy'] = FALSE;
答案 0 :(得分:0)
if($_POST['user'] && $_POST['password'])
{
$this->session->set_userdata(array(
'user' => serialize($this->user),
'logged_in' => true,
'last_access' => time(),
'session_max_time' => config_item('app_sess_expiration'),
));
}
答案 1 :(得分:0)
你必须在创建会话之前放置查询......就像这样;
if($query->num_array() > 0){
//create your own session data ..
}
还要确保你把它放在config / autoload
中$autoload['libraries'] = array('database', 'session');
然后尝试其他浏览器,或清除浏览器Cookie并重试。