2010-03-16 78 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