2013-12-15 43 views
0

我有一個啓用ajax的登錄表單,它使服務器的ajax調用來登錄。如果成功,它將使用用戶名設置Session對象。然後,當它完成時,OnSuccess事件調用一個局部視圖更新,然後顯示用戶名。如何更新登錄信息

這在VS中正常工作。但是,部署時不會。我認爲問題在於會話沒有得到足夠快的更新,以便第二個Ajax調用能夠看到它。如果我進行頁面刷新,那麼用戶名會更新。

有沒有其他方法我應該這樣做?我唯一能想到的就是進行數據庫調用,以查看用戶是否已登錄,而不是依賴於會話對象。

這是局部視圖:

<ul id="LoginLinksPartial"> 


@{ var customer = (NTC.PropertySearch.Models.Customer)Session["Customer"];} 

@if (customer!=null) 
{ 
     @customer.DisplayName 
     @Html.ActionLink("Logout", "Logout", "Account") 

} 
else 
{ 
    <ul> 
     <a onclick="openLoginWindow()">Login</a> 
     <a onclick="openRegisterWindow()">Register</a> 
    </ul> 
} 
</ul> 
+0

客戶端還沒有給你的cookie,你仍然在http請求的同一個實例上,就像你登錄時一樣,I.E客戶端還沒有在它的頭中發送會話。這將在下一個請求,因此刷新工程的原因 – davethecoder

+0

是的,但我使用服務器上的會話對象,所以它似乎應該可用。 –

+0

不可用於客戶端服務器創建會話 - >發送到客戶端 - >客戶端將會話發送到服務器<-->服務器客戶端握手。您的案例服務器創建會話--->發送到客戶端 - >客戶端沒有提出新的請求,所以不會發送頭 - 結果,沒有握手 – davethecoder

回答

0

把儘可能回答這樣的問題就可以解決:爲了創建會話握手

客戶尚未發送的會話回服務器。

在這種情況下的建議是,所有購物者首次訪問網站時都會有一個會話,如果發生登錄(在彈出窗口中),會話只是用用戶REAL ID更新,如果需要,籃子行也會更新新的會話ID或用戶ID。