在 YII2 中使用自动注销,需要在再次登录后将用户重定向到用户在自动注销之前的相同 URL

Posted

技术标签:

【中文标题】在 YII2 中使用自动注销,需要在再次登录后将用户重定向到用户在自动注销之前的相同 URL【英文标题】:Using Auto Logout in YII2, Need to redirect user after login again to the same URL where user was before Auto Logout 【发布时间】:2020-02-14 06:28:17 【问题描述】:

我的系统使用 YII2。由于不活动一段时间后系统自动注销用户。截至目前,它在登录后重定向到主主页。但是我需要将用户重定向到他/她由于不活动而退出系统时所在的同一页面。

我尝试使用 YII2 返回 URL 以及会话,但是当系统注销用户时会话也会被破坏。

我还需要保留用户身份,因为它应该仅在自动注销后同一用户再次登录系统时重定向。

我尝试了 YII2 返回 URL 以及会话。

Yii::$app->user->returnUrl = someurl

上面一行保存返回 url 并重定向到设置 URL

$url = Yii::$app->user->returnUrl;
return $this->goBack($url);

将用户重定向到以前的 URL 但它不起作用。

我还需要识别用户,用户应该是由于不活动而从系统中注销的用户,否则它会将其他用户也重定向到第一次登录的前一个 URL。

【问题讨论】:

超时注销后会话不应被破坏。如您所见,in code 使用 false 作为 $destroySession 参数调用注销。 【参考方案1】:

首先是goBack() 方法does not takes any argument。它使用先前设置的returnUrl(如您的示例)。

此外,问题在于,当您注销用户时,将删除与身份验证相关的会话数据。如果$destroySession 为真,则所有会话数据都将被删除。而logout() 方法中的$destroySession 默认为true,因此除了与身份验证相关的会话数据外,还删除了returnUrl 数据。

尝试将$destroySession参数设置为false的用户注销:

Yii::$app->user->logout(false)

【讨论】:

【参考方案2】:

试试return $this->redirect(Yii::$app()->request->referrer);

【讨论】:

请解释一下你的答案 Referrer或Referrer page是上一个网页的URL。所以 Yii::$app()->request->referrer 存储之前的 Yii2 页面 url。重定向功能将重定向到上一页。

以上是关于在 YII2 中使用自动注销,需要在再次登录后将用户重定向到用户在自动注销之前的相同 URL的主要内容,如果未能解决你的问题,请参考以下文章

Yii2 - 登录后用户被注销

在JSF中注销后尝试再次登录时出现ServletException

注销后如何保存购物车数据的会话,以便用户在 Django 中再次登录时可以找到它们?

注销按钮操作不起作用

Yii2 使用计时器重定向

Yii2,如何将登录用户的用户名自动保存在另一个表中?