2012-02-21 89 views
4

我正在使用ASP.Net Full-Ajax站點。因爲所有操作都通過Ajax請求來完成,所以任何回發請求都不會發送到服務器。另一方面,我有一個javascript定時器發送ajax請求來檢查會話,並且它是否過期將用戶重定向到登錄頁面。如何使用ajax請求重置ASP.Net會話狀態超時

問題在於:當用戶在頁面上工作20分鐘,所有操作都會在20分鐘後使用ajax請求完成,其會話過期並且用戶將在頁面工作期間完全重定向到登錄頁面(通過該javascript定時器)。所以我需要用ajax請求來刷新它的會話狀態。但是怎麼樣?我怎麼做才能通過ajax請求重置會話狀態超時!?!!

依靠我的谷歌搜索結果中,我無法用Ajax請求瓶坯,因爲店裏的SessionID在客戶端的cookie並更新它需要大跳後回退請求:(

注意:會話狀態坐落於InProc模式timeout = 20

對不起我的英文不好的語法,我英語新

問候,Foroughi

UPDATE:ajax請求更新會話狀態超時?

UPDATE:當我的用戶登錄到網站,我設置這樣的會議:

Session["UserId"] = UserObject.Id; 

,並在我所有的頁面我使用一些Web方法瓶坯這樣的操作:

[WebMethod] 
public static Opr1 (Paramethers...) 
{ 

    //Question is here , how can i update UserId session to prevent to expire,how can i update it 

    //execute my codes to preform Opr1 

} 
+0

你描述它的方式不應該有問題。 Ajax請求將發送到服務器。當服務器執行一些代碼時(實際上,當它剛剛收到請求時),會將會話滑到另一個20分鐘。 – 2012-02-21 08:26:37

+0

我不這麼認爲,因爲我的ajax請求不更新會話超時?這裏有什麼不對?! :( – 2012-02-21 08:28:17

+2

http://stackoverflow.com/questions/1431733/keeping-asp-net-session-open-alive可能的重複 – 2012-02-21 08:29:38

回答

3

如果您正在使用webMethods你應該裝點像

[WebMethod(EnableSession = true)] 

另外,如果你需要保持你的會話還活着,你應該嘗試創建一個實現IRequireSessionState該接口允許獲得一個HttpHandler你的方法/套(反序列化/序列化)最終會導致會話超時的會話變量。

這是一篇關於session和ajax調用的好文章。

http://seejoelprogram.wordpress.com/2008/11/10/maintaining-aspnet-session-state-in-an-ajax-application/

希望這將有助於

問候。

+0

我有同樣的問題,當ajax調用,但我使用MVC和我從客戶端調用我的動作(我的動作返回json數據)。 是否有任何類似的解決方案的行動在MVC? – 2016-05-06 08:03:50

0

這是我在做的方式:

我有一個簡單的Web服務來檢查用戶是否通過身份驗證,但您可以更改代碼來檢查是否sess離子不過期。

<%@ WebService Language="C#" Class="CheckAutheticated" %> 

using System; 
using System.Web; 
using System.Web.Services; 
using System.Web.Services.Protocols; 

[WebService(Namespace = "http://tempuri.org/")] 
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] 

[System.Web.Script.Services.ScriptService] 
public class CheckAutheticated : System.Web.Services.WebService { 

[WebMethod] 
public string checkAuthenticated() 
{ 
    return "authenticated"; 
} 

}

然後客戶端我把它叫做:

function checkAuthenticated() { 
     { 
      $.ajax({ 
       type: "POST", 
       url: "CheckAutheticated.asmx/checkAuthenticated", 
       data: "{}", 
       contentType: "application/json; charset=utf-8", 
       dataType: "json", 
       success: checkAuthenticatedOk, 
       error: checkAuthenticatedError 
      }); 
     } 
    } 
    function checkAuthenticatedOk() { } 
    function checkAuthenticatedError() { 
     $("#sessionExpiredCover").show(); 
    } 

這裏一些基本的CSS

<style type="text/css"> 
    #sessionExpiredCover { 
    position: absolute; 
    top: 0; 
    left: 0; 
    width: 100%; 
    height: 100%; 
    z-index: 100000; 
    display: none; 
    background-color: #fff; 
    /*opacity: .7; 
    filter:progid:DXImageTransform.Microsoft.BasicImage(opacity=.7);*/ 
    } 
    </style> 

終於在div

<div id="sessionExpiredCover"> 
    <div style="background-color:#fff; margin:100px; height:200px; width:400px;"><h1>Session expired</h1> 
     <br /> 
     <asp:HyperLink NavigateUrl="~/Login.aspx" runat="server" Text="Please log in again" /> 
    </div> 
    </div> 
+0

看看我的更新花花公子 – 2012-02-21 08:52:34