Классический ASP Session ID Cookie Lifetime - PullRequest
4 голосов
/ 19 июня 2009

В моем классическом приложении ASP cookie, относящиеся к идентификатору сеанса ASP, теряются, когда клиент закрывает свой браузер, даже если время сеанса не истекло. Итак ...

Как сделать так, чтобы файл cookie идентификатора сеанса ASP оставался прежним, даже если клиент закрывает свой браузер?

Ответы [ 5 ]

5 голосов
/ 19 июня 2009

Когда вы начинаете новый сеанс браузера и просматриваете свой сайт, классический ASP обнаружит, что нет файла cookie сеанса ASP, и создаст новый сеанс для вас (как вы уже испытали).

Сеансовые куки-файлы просто существуют, они существуют на протяжении всего сеанса. Когда вы закрываете браузер, cookie-файл сеанса будет удален (даже если ваше состояние сеанса на сервере будет сохраняться как потерянный сеанс до тех пор, пока не истечет Session.Timeout - если вы снова не представите тот же cookie-файл сеанса в течение периода Session.Timeout).

Единственный способ продлить срок действия файла cookie сеанса ASP в новых сеансах / экземплярах браузера - изменить время жизни файла cookie с помощью сценария в браузере / клиенте.

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

Edit:

В следующей статье есть скрипт для изменения cookie-файла сеанса (прокрутите вниз до срока действия cookie):

Но, как правильно указывает Шобан, существует риск Фиксация сессии (OWASP) . Тем не менее, вы можете пойти каким-то образом, чтобы защитить себя от этого:

Я бы также добавил несколько предостережений: если ваше приложение хранит конфиденциальные данные (кредитные карты, финансовые, медицинские и т. Д.), То я бы предложил не делать этого и согласиться с тем, что вашему пользователю придется снова войти в систему и запустить новый сеанс. Лучше безопасно, чем потом сожалеть.

1 голос
/ 19 июня 2009

Ключ cookie сеанса - ключ: когда пользователь закрывает свой браузер, он заканчивает свой сеанс.

Тайм-аут сервера существует, поскольку у сервера нет возможности узнать, что пользователь завершил сеанс, поэтому он работает на основе того, что, если они не возвращаются некоторое время, сеанс должен быть закончен.

Если вам нужен постоянный файл cookie, вам придется установить его самостоятельно; но нет никакого способа предотвратить завершение сеанса пользователем.

1 голос
/ 19 июня 2009

Вы можете увеличить время ожидания сеанса.

Session.Timeout[=nMinutes] 

http://www.asp101.com/articles/john/sessionsend/default.asp

 <%
    Response.Cookies("firstname")="Alex"
    Response.Cookies("firstname").Expires=#May 10,2012#
    %>

Разве эта работа ??

http://www.w3schools.com/ASP/asp_cookies.asp

0 голосов
/ 19 июня 2009

Вам необходимо сохранить файл cookie сеанса, так как по соображениям безопасности вы не можете получить доступ к сеансу между браузерами (будь то два разных браузера или один и тот же, закрытый и повторно открытый).

Обычно вы сохраняете подробности на стороне сервера и используете cookie-файл на стороне клиента, который содержит простой идентификатор для получения информации.

0 голосов
/ 19 июня 2009

Разве это не задумано?

Может быть, вы хотите вместо этого использовать обычный файл cookie?

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