Неверный файл cookie сеанса не признан недействительным или заменен? - PullRequest
3 голосов
/ 25 марта 2011

В ASP.NET у меня была странная ситуация, когда Session_Start срабатывал каждый раз, когда пользовательский агент обновлял страницу.Так как сессия уже должна была начаться, я не мог понять, почему (этот один компьютер) вызывал Session_Start каждое попадание на страницу.

Браузер отправлял cookie как часть HTTP-запроса:

GET http://example.com/ HTTP/1.1
Accept: text/html, application/xhtml+xml, */*
Accept-Language: en-US
Accept-Encoding: gzip, deflate
...
Cookie: ASP.NET_SessionId=zsdntozy30cwvirc3lpnxh55

Файл cookie присутствовал в заголовке http request , однако он вызывал создание нового сеанса.К сожалению, новый Cookie не отправлялся клиенту (через заголовок ответа Set-Cookie).

i предполагает , что если файл cookie сеанса ASP.NET_SessionId=zsdntozy30cwvirc3lpnxh55 недействителен(например, из-за перезапуска пула приложений или перезапуска веб-сервера) сервер должен set новый файл cookie.

Чтобы проверить это, я создал специальный http-запрос сявно недопустимый файл cookie:

GET http://example.com/ HTTP/1.1
Accept: text/html, application/xhtml+xml, */*
Accept-Language: en-US
Accept-Encoding: gzip, deflate
...
Cookie: ASP.NET_SessionId=aaaaaaaaaaaaaaaaaaaaaaaa

Конечно, событие Session_Start происходит, и ответ http не содержит заголовка Set-Cookie:

HTTP/1.1 200 OK
Server: ASP.NET Development Server/10.0.0.0
Date: Thu, 24 Mar 2011 23:45:50 GMT
X-AspNet-Version: 2.0.50727
Cache-Control: private
Content-Type: text/html; charset=utf-8
Content-Length: 3710
Connection: Close

Isэто предполагаемое поведение?Если файл cookie сеанса клиента больше не действителен, он застрянет в какой-то ничейной стране, пока браузер клиента не убедится уничтожить файл cookie?

Есть ли вариант для ASP.NET отправить новый сеанс cookie для клиента?В конце концов, создает новый сеанс - почему бы не сообщить об этом клиенту?

Это какая-то странная функция безопасности, когда пользователь должен удалить все куки, если сервер получаетикота?

...