2010-03-16 77 views
1

我的网站包含单个aspx页面以及像图片,js和样式表等少量资源。当页面打开时,它会生成Asp.Net_SessionId,当获取其他资源时会使用它,但是该资源会将ASP.NET_SessionId与响应重置。关于这个还能做什么?会话cookie由ASP.NET重置

Default.aspx: 
Request: 
Cookie ASP.NET_SessionId= 

Response 
Set-Cookie ASP.NET_SessionId=pf31rzumimjurdmdhc1qgq45; expires=Tue, 16-Mar-2010 14:21:43 GMT; path=/; HttpOnly 

Default.css: 
Request: 
Cookie ASP.NET_SessionId=pf31rzumimjurdmdhc1qgq45 

Response: 
Set-Cookie ASP.NET_SessionId=; expires=Tue, 16-Mar-2010 14:21:44 GMT; path=/ 

这让我疯狂。它只发生在我设置sessionCookie.Expire值时。此外,有时它很好,有时它像上面的描述:(

回答

4

你是否存储Session对象中的任何东西?如果不存在,ASP.NET将不会保存您的会话并在每个请求上使用新的会话ID。访问会话ID之前存储一些虚拟的值,例如

Session("Dummy") = 1 

+0

我应该在哪里使用这段代码?我不能把它放在ASPX中,因为来自CSS文件的响应会删除会话。 – 2010-03-16 14:50:50

0

在Global.asax中

private void Session_Start(Object sender, EventArgs e) 
{ 
    Session.Add("blerg",1); 
} 

我不能去测试。此外,在IIS6上,默认情况下静态文件直接提供,而不通过ASP.NET isapi过滤器,所以如果您不使用通配符映射,这一切都是徒劳 - 您将不会有任何会话进行如果它不通过ASP.NET管道,则为静态文件。 Cassini/VS Dev Server都通过ASP.NET管道发送所有静态文件。关于我的头顶,我不知道IIS7中静态文件的默认行为。

+0

我的猜测是静态文件默认由IIS直接提供。 – 2010-03-16 19:50:06

+0

IIS 7的真正答案取决于管道模式:http://learn.iis.net/page.aspx/508/wildcard-script-mapping-and-iis-7-integrated-pipeline/无需猜测何时谷歌知道它。 – MatthewMartin 2010-03-17 17:12:00