Yii 用户在 15-30 分钟后注销,尽管会话超时设置为至少 1 天

2022-08-30 19:18:35

我在下面包含了 Yii 配置文件的相关部分:

return array(
...
    'components'=>array(
        'session' => array(
            'timeout' => 86400,
        ),
        'user'=>array(
            'allowAutoLogin' => true,
            'autoRenewCookie' => true,
            'authTimeout' => 31557600,
        ),
    ...
    ),
...
);

我也一直在使用php.ini和设置,但这仍然没有解决问题。session.gc_maxlifetime = 86400

目前,我完全不知道还有什么可能导致它超时并在大约15-30分钟不活动后将用户注销。理想情况下,用户应保持登录状态至少一天不活动(并且除了关闭浏览器窗口之外,浏览器首选项允许)。

我已经拖网了谷歌,Yii和堆栈溢出,只是找不到任何我忽略的东西......但显然我忽略了一些东西。如果有人能帮助我,我将不胜感激。


我们请求用于登录用户的典型代码示例,如下所示:

$identity = new UserIdentity('facebook', $id, $user->name, $user->email);
$loggedIn = Yii::app()->user->login($identity);
$this->subscriptionChecker->updateCurrentUserSubscribed();

这是任何时间的典型,称为Yii::app()->user->login()


在Chrome中,以下是我为网站及其到期而拥有的cookie(在清除所有cookie并仅登录后):

PHPSESSID expires When the browsing session ends

// I'm informed these are set by google analytics  
__utma created Friday, 12 October 2012 14:05:31 expires Sunday, 12 October 2014 14:05:31

__utmb created Friday 12 October 2012 14:05:31 expires Friday 12 October 2012 14:35:31,

__utmc created Friday, 12 October 2012 14:05:31 expires When the browsing session ends

__utmz created Friday 12 October 2012 14:05:31 expires Saturday 13 April 2013 02:05:31  
// end google analytics

答案 1

http://www.yiiframework.com/doc/api/1.1/CWebUser#login-detail

感谢Arfeen的帮助,他为我指出了正确的方向,除非你设置了第二个参数,否则Yii不会使用持久性cookie,因为第二个参数默认为0。此默认 0 值将覆盖您可能已设置为与超时相关的任何其他内容。Yii::app()->user->login()


答案 2

我有一个同样的问题,即使我使authTimeout 3600 * 24(24小时)用户仍然在大约30分钟内注销。我发现在php上.ini有一个选项:

session.gc_maxlifetime

默认情况下,此选项为24分钟,因此我更改了所需的内容

session.gc_maxlifetime = 86400

24小时。问题为我解决了。

希望这可以帮助某人!


推荐