如何使用ajax请求重置ASP.Net会话状态超时

时间:2012-02-21 08:16:28

标签: asp.net ajax session-state session-timeout

我正在开发一个ASP.Net Full-Ajax网站。因为所有操作都是通过Ajax请求进行的,所以任何回发请求都不会发送到服务器。另一方面,我有一个javascript计时器,它发送一个ajax请求来检查会话,如果它过期,则将用户重定向到登录页面。

问题出在这里:当用户在页面上工作20分钟并且所有操作将在20分钟后执行ajax请求,其会话到期,用户将在使用页面时完全重定向到登录页面(通过该javascript计时器)。所以我需要用ajax请求刷新其会话状态。但是如何?我怎么能通过ajax请求重置会话状态超时!?!!

取决于我的Google搜索结果,我无法通过ajax请求进行预制,因为SessionId在客户端中存储为Cookie并更新它需要预先发布回发请求:(

注意:会话状态在InProc模式下设置timeout = 20

抱歉我的英语语法不好,我是英语新手

问候,Foroughi

更新:ajax请求是否更新会话状态超时?!!

更新:当我的用户登录网站时,我设置了这样的会话:

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

}

2 个答案:

答案 0 :(得分:3)

如果你使用的是WebMethods,你应该装饰你的方法,如

[WebMethod(EnableSession = true)]

此外,如果您需要保持会话处于活动状态,您应该尝试创建一个实现IRequireSessionState的HTTPHandler,此接口允许获取/设置(反序列化/序列化)会最终滑动会话超时的会话变量。

这是关于会话和ajax调用的好文章。

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

希望这会有所帮助

问候。

答案 1 :(得分:0)

这就是我正在做的事情:

我有一个简单的Web服务来检查用户是否经过身份验证,但您可以更改代码以检查会话是否过期。

<%@ 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>