【发布时间】:2017-12-06 01:43:23
【问题描述】:
Codeigniter 存在问题,我无法修复。当我成功登录并创建必要的会话变量时,下一个请求中的重定向无法检索这些变量。 $_SESSION 变量没有它们!
这是当有人提交用户和密码登录时执行的代码:
$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;
【问题讨论】:
-
你有没有想过使用codeigniter表单验证codeigniter.com/user_guide/libraries/form_validation.html
-
CI 会话与 PHP 会话是分开的。它们存储在您定义的文件或数据库表中。那么你的 config.php 文件中的 CI Sessions 配置设置是什么?
-
@TimBrownlaw 我使用文件存储选项。我已按照您的要求添加了会话配置行。
-
我认为你很困惑......你应该只使用 $_SESSION 或 CI 的会话。它们是不同的...如果您使用 CI Sessions 设置会话 var 它不会出现在 $_SESSION 中...因此如果您使用的是 CI 会话,您可以使用类似 var_dump($this->session->userdata ());
-
另外,您的会话保存路径应该在您的文档根目录中。您正在尝试将会话写入需要 root 权限的系统文件夹。
标签: php codeigniter session codeigniter-3