在CI中使用会话数据库并在页面加载时复制会话记录时,在user_agent字段中可见多个浏览器名称

时间:2013-09-14 15:01:36

标签: php codeigniter session session-cookies

我正在使用Codeigniter在ci_sessions表中存储会话数据。在第一次加载网页时,我得到一个cookie(这没关系),但同时我在ci_session表中得到两个完全相同的记录(会话ID除外)。这是荒谬的,因为只有一个用户代理和IP组合。

此外,当我尝试其他浏览器时,它开始在user_agent字段中显示我的所有浏览器1条记录。这让我疯了。以下是我在使用其他浏览器访问我的网站后在用户代理中看到的内容。我很快就要上线了,请帮忙!

user_agent

Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.66 Safari/537.36

我的会话表如下

#  Name         Type
1 session_id    varchar(40) 
2 ip_address    varchar(45) 
3 user_agent    varchar(255) 
4 last_activity int(10)
5 user_data     text
6 login_time    timestamp

我的会话配置如下

$config[‘sess_cookie_name’]  = ‘cisession’;
$config[‘sess_expiration’]  = 7200;
$config[‘sess_expire_on_close’] = TRUE;
$config[‘sess_encrypt_cookie’] = FALSE;
$config[‘sess_use_database’] = TRUE;
$config[‘sess_table_name’]  = ‘ci_sessions’;
$config[‘sess_match_ip’]  = TRUE;
$config[‘sess_match_useragent’] = TRUE;
$config[‘sess_time_to_update’] = 300;

仅供参考 - 我正在自动加载会话库。

1 个答案:

答案 0 :(得分:0)

我会尝试两件事。首先改变这些界限:

$config['sess_encrypt_cookie'] = TRUE;
$config['sess_time_to_update'] = 30;

// also make sure you have set an encryption key
// you might like http://randomkeygen.com/
$config['encryption_key'] = '';

然后在您的应用程序目录中创建.htaccess

# Use Mod_deflate to compress static files
<ifmodule mod_deflate.c>
<filesmatch ".(js|css|ico|txt|htm|html|php)$">
SetOutputFilter DEFLATE
</filesmatch>
</ifmodule>

# Speed up caching
FileETag MTime Size

# Expires
ExpiresActive On
ExpiresDefault "access plus 366 days"

# Future Expires Headers
<filesmatch ".(ico|pdf|flv|jpg|jpeg|png|gif|js|css|swf)$">
Header set Expires "Sat, 27 Dec 2014 23:59:59 GMT"
</filesmatch>

参考:Codeigniter duplicate session issue

  

在我的应用程序中,我将以下代码放入.htaccess中   阻止使用css / js / images请求发送cookie

关于用户代理,这实际上是正确的,它的显示方式。这是一个很好/简单的阅读,解释了如何组成用户代理字符串:History of the browser user-agent string