В 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 для клиента?В конце концов, создает новый сеанс - почему бы не сообщить об этом клиенту?
Это какая-то странная функция безопасности, когда пользователь должен удалить все куки, если сервер получаетикота?