会话创建和删除延迟:Android webView

时间:2018-05-13 13:08:17

标签: yii2 android-webview

我的网站使用Yii2作为框架,我使用“Dektrium user”模块来实现注册和身份验证。在配置中,我将autologin属性设置为“true”

当我在我的网站上注册(通过webView打开)时,会话已打开,我保持logged in,这没关系,但是当我关闭我的应用并再次打开它时,我看到{ {1}}我需要再次输入我的注册数据。但是,如果我等待(大约30秒-1分钟)然后关闭应用程序 - 会话将被保存,我可以再次打开应用程序并使用而无需输入我的login form并通过。

login相关的情况相同:如果我点击log out并快速关闭“log out”应用,然后再次打开 - 我仍然是webView

最奇怪的部分是logged in iPhone所有工作正常。当然,我试图通过浏览器重现这个错误,没有webView - 并且它们也都正常工作。

也许有人有一些想法,为什么webViewwebView会话有些延迟?

1 个答案:

答案 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,