Проблема с файлом cookie sfRemember / sfGuard Запомнить меня

Я использую Symfony 1.4 с Doctrine.

Извините, если это глупый вопрос, но что именно нужно построить поверх sfDoctrineGuardPlugin, чтобы заставить работать функцию «запомнить меня»?

Когда я вхожу в систему, создается файл cookie sfRemember со сроком жизни 15 дней по умолчанию, а ключ запоминания сохраняется в таблице плагина sf_guard_remember_key.

Без каких-либо настроек плагина метод sfGuardSecurityUser SignIn() создает файл cookie, но метод Signout() стирает его, не оставляя файла cookie, если вы не вошли в систему!

Signin():
sfContext::getInstance()->getResponse()->setCookie($remember_cookie, $key, time() + $expiration_age);

Signout():
sfContext::getInstance()->getResponse()->setCookie($remember_cookie, '', time() - $expiration_age);

Я вижу, что таблица базы данных сохраняет файл cookie как отношение sf_guard_user, но это не очень хорошо, если файл cookie исчез...

Я был бы признателен, если бы кто-нибудь мог сказать мне, что мне здесь не хватает, и в идеале, если я не позволю методу Signout() удалить файл cookie, нужно ли мне писать код для чтения файла cookie самостоятельно или это где-то автоматизировано/ как-то? У меня стандартные установки Symfony 1.4 и sfDoctrineGuardPlugin.

Все это кажется совершенно неправильным, и документации по этому поводу не существует.

Любая помощь будет оценена.


person Tom    schedule 28.04.2010    source источник


Ответы (1)


Почему вы хотите сохранить файл cookie для запоминания после того, как пользователь вышел из системы?

Его единственная цель - удержать пользователя в системе даже после истечения времени его текущего сеанса - отсюда и файл cookie. Это означает, что если он закроет браузер (и файл cookie сеанса будет удален), он автоматически войдет в систему с запоминающим файлом cookie при следующем посещении сайта.

Но если он выходит из системы, мы хотим его полностью разлогинить — вот почему необходимо очистить куки запоминания.

person Maerlyn    schedule 28.04.2010
comment
@Maerlyn: у меня сложилось впечатление, что функциональность как-то связана с облегчением входа в систему при следующем посещении пользователя (если он находится в пределах срока действия файла cookie) путем сохранения имени пользователя и / или пароля для быстрого доступа ... Symfony уже сохраняет другой куки под названием symfony. Извините за педантизм, но вы уверены, что это так, как вы говорите? - person Tom; 29.04.2010
comment
Хм.... становится ясно. Думаю, это один из способов сделать это. Теперь я понял, спасибо. - person Tom; 29.04.2010
comment
@ Том: Да, я уверен. Существует два типа файлов cookie: файлы cookie сеанса (которые удаляются при закрытии браузера) и обычные файлы cookie с датой истечения срока действия (т. е. удаляются 30 апреля 2010 г. в 12:34 UTC). Первый используется, когда вы используете простой php $_SESSION superglobal и другие функции управления сеансом. Это то, к чему вы можете получить доступ через экземпляр sfUser. Обычный используется для функции запоминания просто потому, что он не удаляется при закрытии окна. По-прежнему необходимо удалить его, когда пользователь хочет выйти из системы. - person Maerlyn; 29.04.2010
comment
Да, спасибо, теперь это имеет смысл. Я думал, что функциональность направлена ​​​​на достижение чего-то другого, и отсюда путаница. - person Tom; 29.04.2010