Я использовал ключ «Remember_me» в моем файле « security.yml », чтобы использовать функцию запомнить_me Symfony. Я использовал всю неделю (пожалуйста, смотрите мой файл security.yml ниже) . Я использую Symfony версии 2.8.48 и friendsofsymfony / user-bundle версия v 2.0.1.
Так что после того, как я успешно войду на свой веб-сайт через форму входа в систему, файл cookie REMEMBERME будет отлично установлен , и я вижу его в моем навигаторе (Google Chrome), с правильной настройкой Expires / Max-Age на неделю позже (на скриншоте истекает 7 ноября, так как вход в систему был произведен 31 октября).
Но примерно через через один или два часа после закрытия вкладки страницы моего веб-сайта, если я вернусь на свой веб-сайт, хотя файл cookie REMEMBERME по-прежнему отображается в моем навигаторе, я уже отключен .
Как это возможно? Почему не работает функционал Remember_me? Я следил за точной настройкой документации Symfony по следующей ссылке:
https://symfony.com/doc/2.8/security/remember_me.html
В форме входа в систему я также добавил ввод с именем Remember_me в виде флажка (проверьте мой фрагмент ниже)
Это проблема, связанная с параметром сеанса в моем файле config.yml? Это связано с параметром cookie_lifetime?
Плюс, если я хочу выяснить, с чего мне начать. Где в «Symfony» запускается информация «проверьте, существует ли cookie-файл Remember_Me», и какой обработчик автоматически проверяет, существует ли «cookie-файл« Remember_me »?
Заранее спасибо.
Мой файл security.yml
main_firewall:
pattern: ^/
anonymous: false
context: general_context
entry_point: my_custom_authentication_entry_point
form_login:
provider: fos_userbundle
login_path: fos_user_security_login
check_path: fos_user_security_check
default_target_path: my_custom_target_path
use_forward: false
use_referer: true
post_only: true
username_parameter: _username
password_parameter: _password
success_handler: my_custom_handler
failure_handler: my_custom_handler
require_previous_session: false
csrf_token_generator: security.csrf.token_manager
logout: true
remember_me:
secret: '%secret%'
lifetime: 604800
path: /
always_remember_me: true
Мой файл config.yml (только часть сеанса):
framework:
session:
# handler_id set to null will use default session handler from php.ini
handler_id: ~
Мой логин.html.twig (упрощенная версия для целей этого вопроса):
<form action="{{ path("fos_user_security_check") }}" method="post">
<h2>{{ 'login.label.email'|trans }}</h2>
<input id="email" type="email" name="_username" placeholder="{{ 'login.placeholder.email'|trans }}">
<h2>{{ 'login.label.password'|trans }}</h2>
<input id="password" class="AS-new-form-input AS-new-form-input-full-width" type="password" name="_password" placeholder="{{ 'login.placeholder.password'|trans }}">
<div class="hidden">
<input type="checkbox" id="remember_me" name="_remember_me" checked />
<label for="remember_me">{{ 'login.label.remember_me'|trans }}</label>
</div>
<input type="hidden" name="_csrf_token" value="{{ csrf_token('authenticate') }}"/>
<button type="submit">{{ 'login.action.connect'|trans }}</button>
</form>
Последняя небольшая точность, моя форма входа обрабатывается с помощью ajax. Поэтому я использую следующее, чтобы отправить форму входа
var username = ///I get the value from my input
var password = ///I get the value from my input
var csrfToken = ///I get the value from my input
$.ajax({
url: Routing.generate('login_check'),
type: 'POST',
data: {_username: username,_password: password ,_csrf_token: csrfToken, _remember_me: true},
success: function(data, statusText, xhr) {
///execute my function////
}
});
Ниже приведен скриншот моей консоли навигатора
Дополнительная информация, основанная на первых ответах
Итак, на основании первого комментария, который я получил от Йована, я обновил параметр session.cookie_lifetime и установил его на 604800
session:
cookie_lifetime: 604800
Разница в том, что cookie PHPSESSID имеет правильную дату истечения срока действия (показано на скриншоте ниже) => Я подключил своего пользователя 1 ноября, а срок действия - 8 ноября.
Несмотря на то, что мне потребовалось больше времени, чтобы отключиться, я все же отключился через несколько часов после закрытия вкладки (при отключении cookie около 5 часов, без него это заняло 1 или 2 часа).
Я также пытался var_dump ini_get('session.gc_maxlifetime');
, и я получаю 1440.
Как вы думаете, это связано с временем жизни сеанса на стороне сервера?
Должен ли я обновить параметр session.gc_maxlifetime
? Должен ли я обновить файл php.ini на стороне сервера ??
Какие-либо другие причины, почему я продолжаю отключаться?