我有几个使用Codeigniter版本3.1.10的网站,但其中两个与会话有关。他们都使用数据库作为存储方法,它们之间唯一改变的是用于数据库访问的用户名和密码。他们使用的PHP版本为7.2,并且使用SSL。非工作网站在浏览器调试工具的“值”字段中显示会话数组数据,而工作网站仅显示会话ID。
我尝试通过htaccess文件强制使用HttpOnly,因为这是我注意到的网站之间有所不同的一件事。我已经按照3.1.10手册中的说明重建了ci_sessions表。我只能使用PHP转储会话ID。
我的配置文件:
$config['sess_cookie_name'] = 'ci_session';
$config['sess_expiration'] = 7200;
$config['sess_save_path'] = 'ci_sessions';
$config['sess_match_ip'] = FALSE;
$config['sess_time_to_update'] = 300;
$config['sess_regenerate_destroy'] = FALSE;
$config['cookie_prefix'] = '';
$config['cookie_domain'] = '.domain.com';
$config['cookie_path'] = '/';
$config['cookie_secure'] = TRUE;
$config['cookie_httponly'] = FALSE;
非工作网站在值字段中显示的内容:
a%3A5%3A%7Bs%3A10%3A%22session_id%22%3Bs%3A32%3A%22d10535309de4fe94cf3ab8f18696b541%22%3Bs%3A10%3A%22ip_address%22%3Bs%3A13%3A%22000.000.000.0004%22%3Bs%3A10%3A%22user_agent%22%3Bs%3A68%3A%22Mozilla%2F5.0+%28X11%3B+Linux+x86_64%3B+rv%3A60.0%29+Gecko%2F20100101+Firefox%2F60.0%22%3Bs%3A13%3A%22last_activity%22%3Bi%3A1561497096%3Bs%3A9%3A%22user_data%22%3Bs%3A0%3A%22%22%3B%7D51b0591e7a6e64db0d7b1690138b3d3d85aff629
出于明显的原因,我换出了IP地址和域。我不确定为什么它显示整个数组而不是ID,或者是什么会影响会话的行为。我启用了日志记录功能,但是并不能提供很多帮助。只是试图在这方面引起另外的关注。忘了提到我正在自动加载数据库和会话库。
编辑:所以我在进一步研究它,并且尝试登录到我在一个网站上构建的用户区域,这给了我一些SQL错误。首先,尽管它存在于sess_save_path中,但它不包括表名。我用适当的名称添加了sess_table_name,并解决了最初的问题,但随后它说在where子句后带有session_id字段的问题。我没有使用字段名称session_id,last_activity和user_data。我下载了一个新的3.1.10副本,确实是在system / libraries / Session.php下寻找的副本,但是在手册的任何地方都找不到。即使在调整Session.php中的名称以查看会发生什么之后,也没有任何内容插入ci_sessions表中。
编辑2:我还尝试过更改表中的字段名称,以匹配Session.php所查找的内容,尽管不再存在SQL错误,但仍然没有任何内容插入表中。
答案 0 :(得分:0)
该问题已通过回滚到先前版本的CI 3(我相信为3.1.6)得到纠正。我不确定会话处理方式在各个版本之间会有什么变化,但是我一定会搜索文档以弄清楚这一点。