会话数据不会传播到下一个请求

时间:2017-07-02 19:39:55

标签: php codeigniter session codeigniter-3

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;

2 个答案:

答案 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并重试。