2

我目前正在开发一个 Web 应用程序,用户登录会话被创建并记录到数据库中。

正在发生的事情是,用户将被随机注销,而他们自己没有选择。背景故事是,这通常发生在共享帐户的用户身上(不是最好的事情,而是应用程序的性质,这意味着它需要被允许)。

这可能是随机注销的原因吗?还是 CI 中的一些更深层次的东西和在数据库中存储会话?我还读到同时执行大量 AJAX 请求会导致 SESSION ID 更改,然后可能会覆盖数据库记录并将用户注销。这又是一种可能吗?我认为这个比较少,因为我写了一个补丁来阻止这种情况的发生。

会话配置:

$config['sess_cookie_name']     = 'app';
$config['sess_expiration']      = 0;
$config['sess_expire_on_close'] = FALSE;
$config['sess_encrypt_cookie']  = TRUE;
$config['sess_use_database']    = TRUE;
$config['sess_table_name']      = 'ci_sessions';
$config['sess_match_ip']        = FALSE;
$config['sess_match_useragent'] = FALSE;
$config['sess_time_to_update']  = 300;
$config['sess_use_multisessions'] = TRUE;
$config['sess_multisession_expiration'] = 10;
4

3 回答 3

1

对不起,我之前的回答。我错了。我不确定这两个配置设置,也无法在 CI 手册中找到。
$config['sess_use_multisessions'] = TRUE;
$config['sess_multisession_expiration'] = 10;

但是,这不会造成任何问题。

请尝试将 $config['sess_match_useragent'] 设为 TRUE。

于 2013-11-26T06:05:05.857 回答
0

您是否将会话存储在数据库(ci_sessions表)中?尝试将字段类型更改user_agentmediumtext。默认情况下,varchar255一些用户代理字符串更长,这可能会导致注销。

于 2013-11-26T10:20:00.457 回答
0

我已经将我的配置设置更改$config['sess_time_to_update'] = 300;$config['sess_time_to_update'] = 8400;比以前更好,这样做你可能会遇到安全问题,因为会话需要很长时间才能更新,并且更新会话 ID 将保持不变。

更多我也在为此寻找一个完美的解决方案,我也为 ajax 工作过,就像 stackoverflow 上解释的许多其他线程一样,但这对我不起作用。

在 DB ( ci_sessions table) 中,我也将字段类型更改user_agenttext,它也不适用于我。

于 2015-05-29T06:32:16.703 回答