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



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

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

log out相关的相同情况:如果我单击以“log out”并很快关闭webView应用程序,然后再次打开 - 我仍然logged in.

最奇怪的部分是,在iPhonewebView一切都工作正常。当然,我试图通过浏览器重现此错误,没有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

(1分钟
Yii::$app->getUser()->login($this->user, $this->rememberMe ? $this->module->rememberFor : 60);

或者(我不喜欢你这部分(

您可以默认设置public $rememberMe=true;,使其始终传递默认值两周,以便在未注销时记住。 如果您不想要默认的rememberFor值(2 周(,也可以在modules下的配置中的模块设置中配置自定义值。

'components'=>[
'user'=>[
'rememberFor'=>3000,

最新更新