我正在开发一个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
}
答案 0 :(得分:3)
如果你使用的是WebMethods,你应该装饰你的方法,如
[WebMethod(EnableSession = true)]
此外,如果您需要保持会话处于活动状态,您应该尝试创建一个实现IRequireSessionState的HTTPHandler,此接口允许获取/设置(反序列化/序列化)会最终滑动会话超时的会话变量。
这是关于会话和ajax调用的好文章。
希望这会有所帮助
问候。
答案 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>