我的网站使用Yii2
作为框架,在那里我使用“Dektrium user”
模块来实现注册和身份验证。在配置中,我将autologin
属性设置为“true”
当我在我的网站上注册(通过webView
打开(时,会话被打开,我保持logged in
,没关系,但是当我关闭我的应用程序并再次打开它时 - 我看到login form
,我需要再次输入我的注册数据。但是,如果我等待(大约 30 秒 - 1 分钟(,然后关闭应用程序 - 会话将被保存,我可以再次打开应用程序并使用,而无需输入我的login
和通行证。
与log out
相关的相同情况:如果我单击以“log out”
并很快关闭webView
应用程序,然后再次打开 - 我仍然logged in
.
最奇怪的部分是,在iPhone
webView
一切都工作正常。当然,我试图通过浏览器重现此错误,没有webView
- 它们也都运行良好。
也许有人有一些想法,为什么webView
“freeze”
会议会延迟一些?
About login()
如果
$enableSession
为真:
- 身份信息将存储在会话中,并在 下一个请求
- 在
$duration == 0
的情况下:只要会话 保持活动状态或直到用户关闭浏览器- 在
$duration > 0
的情况下:只要会话保持活动状态或只要 ? Cookie 在几秒钟内保持有效,在以下情况下$duration
$enableAutoLogin
设置为true
.
您需要对Yii::$app->user->login();
使用第二个参数,该参数定义用户可以保持登录状态的秒数,默认为0
。
//keep the cookie duration valid for 120 seconds or 2 minutes
Yii::$app->user->login($user,120);
由于您已将$enableAutoLogin
设置为true
因此不会忽略此参数,并使用默认值0
,并在关闭应用程序后立即清除会话。有关更多详细信息,请参阅DOCS
。
对于您使用的值Dektrium-user
在模块的LoginForm
模型中设置,它使用rememberMe
属性
Yii::$app->getUser()->login($this->user, $this->rememberMe ? $this->module->rememberFor : 0);
默认为false
并与登录表单上的checkbox
一起使用,以使此属性设置为 true
/** @var string Whether to remember the user */
public $rememberMe = false;
这意味着如果您不使用登录表单上的rememberMe
复选框登录会话,并且 cookie 将在注销或窗口关闭后保持0
秒有效。
您可以将else
零件值从0
设置为任何自定义(如60
Yii::$app->getUser()->login($this->user, $this->rememberMe ? $this->module->rememberFor : 60);
或者(我不喜欢你这部分(
您可以默认设置public $rememberMe=true;
,使其始终传递默认值两周,以便在未注销时记住。 如果您不想要默认的rememberFor
值(2 周(,也可以在modules
下的配置中的模块设置中配置自定义值。
'components'=>[
'user'=>[
'rememberFor'=>3000,