【发布时间】:2019-06-27 14:14:21
【问题描述】:
我有几个使用 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 并解决了最初的问题,但随后它表示在带有 session_id 字段的 where 子句之后存在问题。我没有使用字段名称 session_id、last_activity 和 user_data。我下载了 3.1.10 的新副本,这确实是它在 system/libraries/Session.php 下寻找的内容,但我无法在手册中的任何地方找到它。即使在调整 Session.php 中的名称以查看发生了什么之后,也没有任何内容插入到 ci_sessions 表中。
编辑 2:我还尝试更改表中的字段名称以匹配 Session.php 正在查找的内容,尽管不再出现 SQL 错误,但表中仍然没有插入任何内容。
【问题讨论】:
标签: php session codeigniter-3