Сессия создана и удалена с задержкой: Android WebView - PullRequest
0 голосов
/ 13 мая 2018

Мой сайт использует 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” сеанс с некоторой задержкой?

1 Ответ

0 голосов
/ 13 мая 2018

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, если не хотите использовать значение по умолчанию rememberFor (2 недели).

'components'=>[
     'user'=>[
         'rememberFor'=>3000,
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...