Ale*_*o93 5 php session codeigniter-3
经过一个月的尝试解决这个问题,并尝试了相关问题中的各种答案,我决定自己问这个问题。
这个问题发生在我们最近购买的新服务器上,相同的代码在本地主机和最后一台服务器上运行良好。但这可能与代码有关。
会话已正确创建并设置了令牌,var_dump 显示了这一点。但是当用户尝试登录时,重定向到访问功能后,没有设置 Session 令牌,因此不会发生登录。
即使在同一页面上,如果刷新,__ci_last_regenerate(获取上次重新生成 Session 的时间)是当前时间,并在每次刷新后更改。
在 var/lib/php/session 中,每次刷新后都会创建两个不同的文件,不知道为什么。这里的图片:
19 秒的那个有正确的数据(时间和令牌),最后一个只有时间。
此外,我们最近向站点添加了一个新的子域,因此我们在同一台服务器中有两个不同的子域。
这是会话配置:
$config['sess_driver'] = 'files';
$config['sess_cookie_name'] = 'ci_session';
$config['sess_expiration'] = 7200;
$config['sess_save_path'] = NULL;
$config['sess_match_ip'] = FALSE;
$config['sess_time_to_update'] = 300;
$config['sess_regenerate_destroy'] = FALSE;
Run Code Online (Sandbox Code Playgroud)
还尝试了 DB 驱动程序,它在表上生成了 2(或有时 3 行)。配置是:
$config['sess_driver']= 'database';
$config['sess_cookie_name']= 'ci_session';
$config['sess_expiration']= 0;
$config['sess_save_path']= 'ci_sessions';
$config['sess_match_ip']= FALSE;
$config['sess_time_to_update']= 300;
$config['sess_regenerate_destroy']= FALSE;
$config['sess_use_database']= TRUE;
$config['sess_expire_on_close']= TRUE;
$config['sess_table_name']= 'ci_sessions';
Run Code Online (Sandbox Code Playgroud)
数据库的输出是它的列(id、ip、timestamp、data):
数据始终相同,在一种情况下最后一次重新生成包含时间和令牌,而在另一种情况下仅最后一次重新生成(每次刷新 2 行)。
PHP 是 7.2.7 。CodeIgniter 是 3.1.5。
如果需要,将提供所需的任何其他代码或服务器信息。
编辑 4/9: 根据一些用户的要求,还添加了这些 cookie 数据。
$config['cookie_domain'] = '.my-domain.com';
$config['cookie_path'] = '/';
$config['cookie_secure'] = FALSE;
$config['cookie_httponly'] = FALSE;
Run Code Online (Sandbox Code Playgroud)
好吧,问题是 Centos 7 中的 Apache conf 带有两个子域。
我们在同一个 httpd conf 文件中拥有两个 VirtualHost 数据。修复方法是为每个域创建不同的conf 文件。就像是:
域名1.com.conf
<VirtualHost *:80>
ServerName domain1.com
ServerAlias domain1
DocumentRoot /var/www/html/domain1
ErrorLog /var/log/httpd/domain1-error_log
CustomLog /var/log/httpd/domain1-access_log combined
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)
域 2 也是如此。
希望这可以帮助任何人。
| 归档时间: |
|
| 查看次数: |
4624 次 |
| 最近记录: |