我的配置是这样的:
$config['sess_driver'] = 'database'; // select database driver
$config['sess_save_path'] = 'ci_sessions'; // name of the mysql table
$config['sess_cookie_name'] = 'ci_session';
$config['sess_expiration'] = 7200;
$config['sess_expire_on_close'] = FALSE;
$config['sess_encrypt_cookie'] = FALSE;
$config['sess_use_database'] = TRUE;
$config['sess_table_name'] = 'ci_sessions';
$config['sess_match_ip'] = FALSE;
$config['sess_match_useragent'] = FALSE;
$config['sess_time_to_update'] = 300;
我的自动加载是这样的:
$autoload['libraries'] = array('database', 'session', 'form_validation', 'functions');
在控制器中login.php:
$this->session->set_userdata('club', 'chelsea');
在控制器dashboard.php中:
echo $this->session->userdata('club');
如果控制器不同,则无法成功调用会话俱乐部
但是,当我在同一个控制器(控制器login.php)中调用session club时,它可以正常工作
我在Dashboard.php
的构造函数中尝试了$this->library->load('session');
,但是没有成功
有什么办法可以解决我的问题吗?
谢谢
7条答案
按热度按时间nkoocmlb1#
在CodeIgniter 3.x中,如果您刚刚升级到PHP版本7.x,请转到
system/libraries/Session/session.php
的第281行并替换:签署人:
icomxhvb2#
来自@Ali的答案建议将工作或加载
Dashboard.php
的构造函数中的会话库,如下所示...或者,如果您只需要控制器内一个特定函数中的会话,则加载该函数中的库。
关键在于,在调用库的函数之前,必须先将库加载到某个位置。
在控制器中选择自动加载或显式加载会话可能取决于您的站点需要使用会话的频率。如果每个控制器都使用它们,则选择自动加载。如果只有少数位置需要会话,则在不使用它们的位置加载它们是浪费资源。
rqenqsqc3#
我遇到了同样的问题,然后我检查了Session.php中的代码,发现:
但是cookie的长度只有32,所以“ci”每次都创建一个新的cookie。
我改变
到
那就没事了!
vnjpjtjt4#
对于工作会话,在配置文件中设置加密密钥是很重要的。您可以将任何关键字设置为加密密钥。使用复杂的字符串可以提高会话安全性。下面给出的示例$config ['encryption_key']= '4 n9 ^%%$3n^&4v&%7@!90&$$3c3x$^$m8a456#@tgf%$$c';
p3rjfoxz5#
默认情况下需要使用
application/config/autoload.php
加载会话库https://www.codeigniter.com/user_guide/libraries/sessions.html
6l7fqoea6#
我下载了CI 3.0.6的最新版本,当我比较路径application/config/config.php中的会话部分时,
和原始文件有(与您的信息)
之后,您将进入自动加载文件application/config/autoload.php
然后在一个控制器里做这个
applicationi/controller/Example2.php
application/views/example/index.php
希望这能帮助你调试会话库,如果你有更多的问题,发送的结果,在每一个回声我做的看法
dba5bblo7#
默认情况下,codeigniter 3使用文件驱动程序,因此您应该创建一个目录,如下所示:
代码触发器信息
之前,你应该更新config.php的路径目录:
额外好处:如果你使用的是macOSX,你应该看看你的apache用户: