我的网站使用Yii2
作为框架,我使用“Dektrium user”
模块来实现注册和身份验证。在配置中,我将autologin
属性设置为“true”
当我在我的网站上注册(通过webView
打开)时,会话已打开,我保持logged in
,这没关系,但是当我关闭我的应用并再次打开它时,我看到{ {1}}我需要再次输入我的注册数据。但是,如果我等待(大约30秒-1分钟)然后关闭应用程序 - 会话将被保存,我可以再次打开应用程序并使用而无需输入我的login form
并通过。
与login
相关的情况相同:如果我点击log out
并快速关闭“log out”
应用,然后再次打开 - 我仍然是webView
。
最奇怪的部分是logged in
iPhone
所有工作正常。当然,我试图通过浏览器重现这个错误,没有webView
- 并且它们也都正常工作。
也许有人有一些想法,为什么webView
会webView
会话有些延迟?
答案 0 :(得分:0)
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
1分钟
Yii::$app->getUser()->login($this->user, $this->rememberMe ? $this->module->rememberFor : 60);
或(我不喜欢这部分)
默认情况下,您可以设置public $rememberMe=true;
,以便在未注销的情况下始终传递默认值两周。
如果您不想使用默认modules
值(2周),也可以在rememberFor
下的配置中的模块设置中配置自定义值。
'components'=>[
'user'=>[
'rememberFor'=>3000,