2010-07-16 26 views
4

我有一個asp.net登錄頁面,初始化時會設置一些會話變量。當用戶點擊登錄時,會發出一個AJAX請求,驗證用戶並設置其他會話變量並將結果返回給客戶端。客戶端然後根據登錄結果重定向。在重定向頁面中,我可以訪問登錄頁面初始化時(即登錄前)設置的會話變量集,但在登錄驗證期間(ajax調用的一部分)設置的會話變量集都不存在。會話狀態在Ajax帖子之間丟失?

這是預期的行爲?爲什麼ajax調用會生成一個新的會話,從而導致數據丟失?

感謝

+0

你能告訴我們一些代碼,以及你的網站是如何構建的嗎? – 2010-07-16 12:42:26

回答

0

對於在相同的應用程序空間的應用程序的其餘您的Ajax調用的位置?如果我沒有記錯,則不能在應用程序之間共享會話信息。這可能是怎麼回事。

+0

它被稱爲登錄用戶控件的一部分,它是在一個單獨的程序集中,但是是整個站點/應用程序的一部分 – LDJ 2010-07-16 12:23:36

+0

那麼這是值得一試的。 :-)我可能會檢查會話cookie是否被傳入,像Guffa和Crooy推薦的那樣。或者你周圍的工作可以通過客戶端變量通過ajax調用,然後轉到重定向的頁面。 – mwgriffith 2010-07-16 12:42:30

0

會話ID存儲在cookie中,該cookie在響應頭中返回。在您進行AJAX調用時,Cookie只是響應的一部分。如果您想爲另一個請求使用同一會話,則必須獲取該cookie並將其發送到請求的標題中。

+0

請求之間的會話ID相同。作爲一個例子,我把 Session [「test」] =「test」; 登錄頁面onLoad方法。 然後在表單驗證中(會話ID是相同的,我剛剛檢查)該值現在爲'null'。如果我再次設置它: Session [「test」] =「new value」; 然後,當我打我的重定向頁面(再次,同一會話ID), 會議[「測試」] =「測試」再次! 關於發生什麼事情的任何想法?我很困惑! – LDJ 2010-07-16 12:55:23

1

通常,瀏覽器發送會話ID以及ajax請求。如果您使用Firebug或類似的東西,您可以查看ajax請求的內容並檢查會話ID是否一起發送。

會話ID存儲在cookie中,該cookie根據選項只能用於相同的域名/主機名。這可能是它未被髮送的原因。

根據你的代碼,我猜如果沒有會話ID發送一個新的創建。

+0

如上所述,會話ID始終保持一致,但其他所有內容似乎都在登錄頁面,JQuery Ajax POST和返回之間被清除! – LDJ 2010-07-16 12:57:44