在 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的主要内容,如果未能解决你的问题,请参考以下文章
在JSF中注销后尝试再次登录时出现ServletException