2014-09-22 4 views
0

Есть ли встроенный способ уничтожить cookie сеанса, сгенерированный Dancer::Session::Cookie после того, как определенное количество минут простаивает? Я заметил, что он даже не уничтожает сессию, когда я перезапускаю сервер Nginx или Starman, чего я не хочу (по соображениям безопасности).Как уничтожить куки, когда простаивает в Dancer (Perl), используя Dancer :: Session :: Cookie?

Если нет встроенного способа, существует ли что-то по своей сути неправильно с сохранением последнего сеанса, который был активен в базе данных SQL, и обновляя его после каждого действия? Затем, если прошло более 15 минут без обновления этой записи, cookie сеанса будет уничтожен (с session-> destroy). Это не похоже на лучшее решение, но, возможно, это единственный способ. По моему мнению, вы также можете вручную установить время истечения срока действия cookie в HTTP-заголовке, но это только уничтожит cookie на стороне клиента, правильно?

+0

Может быть, попробуйте [ 'session_expires'] (https://metacpan.org/pod/Dancer :: Config # session_expires)? – ThisSuitIsBlackNot

ответ

0

Я думаю, вы хотите сделать обратное.

При создании куки, используйте атрибут expires, чтобы установить его, скажем, «15 минут»:

https://metacpan.org/pod/Dancer::Cookie#expires

Тогда каждый раз, когда вы делаете что-то для этой сессии, вызовите Dancer :: Cookie init метод:

https://metacpan.org/pod/Dancer::Cookie#init

... обновить печенье (если вы не используете путь по умолчанию, пройти по пути).

Браузеру пользователя должен истечь срок действия cookie для вас по истечении заданного времени.

(я на самом деле не пробовал это, но код подразумевает, что должно работать - документация для метода инициализации, безусловно, может быть яснее)

+0

Dancer :: Cookie and Dancer :: Session :: Cookie совместим? Я использую Dancer :: Session :: Cookie для создания сеансов прямо сейчас, но я дам ваше предложение попробовать и дам вам знать! – Gabriel

+0

Я решил обработать истечение, сохранив дату истечения срока действия в зашифрованном файле cookie, обновив его после каждого запроса и проверив, истек ли срок его действия. На стороне клиента я устанавливаю фиксированное истечение 1 дня (используя «session_expires:« 24 часа »в файле конфигурации). Я не мог понять, как изменить значение срока действия на стороне клиента с помощью 'Dancer :: Session :: Cookie' после каждого запроса, но 1 фиксированное время в любом случае должно быть прекрасным (они будут выходить из системы после 30 минут бездействия, поэтому я сомневаюсь, что кто-то отправится целый день без 30-минутного перерыва). – Gabriel