Мобильный сеанс AngularJS / Rails длится всего час - PullRequest
0 голосов
/ 08 февраля 2019

Почему мобильные сеансы длятся час, а рабочий стол не истекает.

Я просто устанавливаю cookie с помощью:

// app.run
$http.defaults.headers.common['X-CSRF-Token'] = $cookies.get('csrftoken');

. Это отлично работает на настольном компьютере (много месяцев), но на мобильном устройстве оно длится всего ~ 1 час.Почему это происходит?Вам нужно по-разному устанавливать файлы cookie для мобильных устройств (протестировано как в Safari, так и в Chrome для iOS)?Это не потому, что пользователь закрывает вкладку, потому что вы можете закрыть и снова открыть и все еще иметь сеанс.

Наконец, как решить эту проблему, чтобы пользователи оставались в системе, скажем, в течение 30 дней?LocalStorage?

ApplicationController

  protect_from_forgery with: :exception
  after_action :set_csrf_cookie_for_ng

  def set_csrf_cookie_for_ng
    cookies['csrftoken'] = form_authenticity_token if protect_against_forgery?
  end

1 Ответ

0 голосов
/ 13 февраля 2019

Если вы явно не установите срок действия файла cookie браузера, добавив Expires=<date> к заголовку Set-Cookie, файл cookie считается файлом сеанса и отбрасывается в том виде, в котором браузер считает конец сеанса.

Большинство браузеров настольных компьютеров имеют возможность «продолжить с того места, где вы остановились», что позволяет сохранять и восстанавливать сеансы (и файлы cookie сеанса) между запусками, поэтому файлы cookie сеанса могут долго храниться на рабочем столе.Я не могу найти документацию по браузерам iOS, но подозреваю, что они просто закрывают сеансы и удаляют куки в какой-то момент, когда считают, что вы «сделали».

Решение состоит в том, чтобы явно установить дату истечения срока действия куки.Из-за сообщений о проблемах с Safari на iOS, я также рекомендую установить домен cookie.Начиная с Rails 5.2, вы можете использовать проходную длительность (ранее и в заголовке Set-Cookie необходимо указать определенную временную метку):

cookies[:name] = {
  value: 'a yummy cookie',
  expires: 1.year,
  domain: 'domain.com'
}

См. Документацию по Rails API для получения дополнительной информации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...