无效的会话cookie未被无效或替换?

时间:2011-03-25 00:09:15

标签: asp.net cookies session-cookies

在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 请求标头中,但它导致创建新会话。但实际上,新的Cookie没有被发送到客户端(通过Set-Cookie响应标头)。

假设如果会话cookie ASP.NET_SessionId=zsdntozy30cwvirc3lpnxh55无效(例如由于应用程序池循环或web服务器重启),那么服务器应该 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

这是预期的行为吗?如果客户端的会话cookie不再有效,那么在客户端浏览器被说服销毁cookie之前,它们会被困在一些无人区域中?

ASP.NET是否可以选择将会话cookie发送给客户端?毕竟,创建新会话 - 为什么不告诉客户呢?

这是一个奇怪的安全功能,如果服务器出现打嗝,用户必须删除所有cookie吗?

0 个答案:

没有答案