【问题标题】:Yii2 Never Logout Idle Or Away UserYii2 从不注销空闲或离开用户
【发布时间】:2019-01-17 17:36:22
【问题描述】:

如果 Yii 中的用户关闭浏览器或闲置大约一天(可能更少,我不确定),他们似乎会自动注销。是否有可能永远不注销它们(或者至少一个月或一年的很长一段时间)。不确定是否需要更改 Session 参数或 Cookie 参数。

我已尝试更改参数。

'components' => [
    'session'=>[
        'class' => 'yii\web\Session',
        'cookieParams' => ['httponly' => true, 'lifetime' => 3600 * 4* 365],
        'timeout' => 3600*4 *365,
        'useCookies' => true
    ],
]

我已经尝试过会话 php ini 参数:

session_set_cookie_params(0);
ini_set('session.gc_maxlifetime', 0);

我已经尝试设置登录参数

 Yii::$app->user->login($user, 31536000);

【问题讨论】:

    标签: session cookies yii2


    【解决方案1】:

    您使用的选项应该可以在没有 timeoutuseCookies 选项的情况下使用,我在上一个项目中使用它,会话需要至少持续一周,在 Mozilla 开发栏中打开存储选项卡并单击 cookie在左侧,您将看到 cookie 部分,其中包含为您的网站注册的 cookie,在我的例子中是 http://www.kp2.local

    如果您使用'lifetime' => 7 * 24 * 60 * 60,,它应该会显示过期日期1 周后 的cookie,即Wed, 23 Jan 2019,如下所示

    如果您注释掉代码然后注销,然后再次登录,它应该会显示Session 的到期时间,例如

    您只需要在配置中使用以下设置

    'session' => [
        // this is the name of the session cookie used for login on the frontend
        'name' => 'advanced-frontend',
        'cookieParams' => [
            'httpOnly' => true,
            'lifetime' => 7 * 24 * 60 * 60
        ],
    ],
    

    如果仍然无法正常工作,请退出系统并尝试通过选择Delete all 选项来删除所有 cookie,如下图所示。

    它会起作用的。

    注意:您应该将'lifetime' => 7 * 24 * 60 * 60,中的7更改为您希望保持会话的天数

    【讨论】:

      【解决方案2】:

      长时间保持会话可能是个坏主意 - 非活动会话数据会消耗您的服务器资源并可能减慢某些操作。 Yii 有专门针对这种情况的功能 - 你可以将 $enableAutoLogin 设置为 true

      'user' => [
          'enableAutoLogin' => true,
          // ...
      ],
      

      login() 上调用身份cookie 设置超时:

      Yii::$app->user->login($user, 31536000);
      

      它将设置带有身份信息的特殊cookie(有效期为一年),在会话到期后自动登录用户。通过这种方式,您不需要在服务器上保留会话数据一年,但从用户的角度来看,他似乎总是在登录(即使在后台创建了一个新会话)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-07-02
        • 2013-10-10
        • 2014-12-08
        • 1970-01-01
        • 2013-01-12
        • 2011-10-14
        • 2013-04-17
        • 2014-05-25
        相关资源
        最近更新 更多