0

我正在使用 CodeIgniter 2.1

我使用 CodeIgniter 的会话来处理用户是否登录。而且效果很好。我将会话存储到数据库中。这是我的一些会话变量:

$config['sess_expiration'] = 3600;
$config['sess_expire_on_close'] = TRUE;
$config['sess_encrypt_cookie'] = TRUE;
$config['sess_use_database'] = TRUE;
$config['sess_table_name'] = 'user_sessions';
$config['sess_match_ip'] = FALSE;
$config['sess_match_useragent'] = FALSE;
$config['sess_time_to_update'] = 15;

我使用如此低的sess_time_to_update增量是因为我需要一种方法来监控用户是否已关闭或导航离开页面。由于 CodeIgniterlast_activity在每次更新(15 秒)时更新该列 - 为了检查空闲情况,我进行如下查询(我知道这不是正确的语言/语法)

if last_activity < (current_time - 25s)然后我知道用户可能已经离开了该页面。

这个概念很好,但我想知道如此频繁地更新会话表是否有任何看不见的问题?

谢谢!

4

2 回答 2

1

if last_activity < (current_time - 25s)仅表示在过去 25 秒内未发出任何请求,不一定表示用户已离开。

除非用户每 15 秒发出一次请求,否则最后一个活动实际上不会每 15 秒更新一次。例如,如果我打开一个页面并阅读它五分钟,最后一个活动将不会更新,直到下一个请求。

我想知道如此频繁地更新会话表是否有任何看不见的问题

只是更新会话表和刷新 cookie 的一点点开销。15 秒是一个非常小的时间范围,但如果这是你真正需要的,应该没问题。

于 2012-06-16T11:24:07.010 回答
0

如果您不想每五分钟更新一次会话,请执行以下更改。

转到中的session.php文件System/libraries/Session.php并将如下所有参数设置为空白。它对我有用。

public $sess_encrypt_cookie;
public $sess_use_database;
于 2015-02-18T05:14:57.020 回答