Codeigniter会话数据登录后在其他页面中不可用

jsw*_*wat 10 php session codeigniter

因此,我设置了一个验证用户凭据的登录页面,然后设置codeigniter会话数据'email'和'is_logged_in'以及其他一些项目.登录后的第一页,可以访问数据.在该页面之后,我无法再访问会话数据.事实上,如果我尝试重新加载第一页,会话数据就会消失.

我已经尝试将其存储在数据库中,将其存储为未加密的(我知道这是个坏主意,但它是用于故障排除),并将其加密存储.我在config.php中自动加载了会话库.

这是我用来设置会话数据的代码示例:

$data = array(
                    'email' => $this->input->post('username'),
                    'is_logged_in' => true 
                );
                $this->session->set_userdata($data);
Run Code Online (Sandbox Code Playgroud)

要检索它,我正在使用:

$this->session->userdata('email');
Run Code Online (Sandbox Code Playgroud)

要么

$this->session->userdata('is_logged_in');
Run Code Online (Sandbox Code Playgroud)

我以前用PHP和cookie以及会话做了很多工作,但这是我与Codeigniter的第一个项目,我感到很困惑.

它可能与目录问题有关吗?我有登录页面和进程由"登录"控制器控制,然后它重定向到"站点"控制器.

感谢您的帮助,如果我需要澄清任何问题,请告诉我.

Joh*_*lum 7

你的代码看起来很好.我在Codeigniter的会话库中遇到了很多问题,包括类似于你提到的内容.

考虑查看Native Session库以解决您的问题.


小智 6

正因为如此,试图使用CI会话的任何人都可以尝试:

我一直在寻找同样问题的解决方案,经过多次死胡同,我重新调查了我的问题config.php.

在那里,我注意到$config['cookie_domain']没有正确设置.设置此项(并将我设置cookie_prefix'')后,会话现在可以正常工作.

由于需要将cookie设置为您的域才能正确提取,因此根本没有为我的会话找到cookie引用,并且每次都创建一个新的.

(设置数据库会话非常有助于搞清楚这一点.)