使用javascript检测会话是否过期

时间:2010-07-22 10:21:10

标签: javascript asp.net session-timeout


我正在使用ASP.Net创建一个Web应用程序。我正在申请中使用会话。
有一种情况我试图通过Javascript访问会话变量。当我在正常状态下访问它时它工作正常。但是在会话到期后,如果单击任何按钮,它会抛出异常并且行为异常,导致找不到页面。
这是我正在使用的代码;

 var TransactionID = '<% =((Hashtable)(Session["SessionData"]))["TransactionID "] %>';
 if(TransactionID !='')
 {
    //action
 }

我正在尝试在c#中实现类似的排序;

String lsStr;
if(null != lsStr)
{
    //action
}

请帮助我,如果有人知道如何使用javascript检查会话是否存在。
提前谢谢。

2 个答案:

答案 0 :(得分:1)

我建议您在代码隐藏页面中使用公共属性:

public string TransactionID
{
   get { 
        var data = ((Hashtable)(Session["SessionData"])); 
        if (data != null)
           return data["TransactionID "];
        else
           return null;
   }
}

绕过即时错误。如果您希望轮询机制知道它何时到期,请考虑JS计时器倒计时/ AJAX调用服务器的想法。如果没有从服务器请求信息,则无法从客户端检查会话。

但是,使用上面的属性,当页面回发时,在客户端上,事务ID JS变量将为null,这将是一种识别会话过期的方法。

HTH。

答案 1 :(得分:0)

将此检查放入计时器客户端的建议会在每次运行时扩展会话,导致会话永不过期,只有这是所需的功能才能执行此操作。

最好的办法是只在需要时通过对不需要身份验证的页面执行ajax请求来执行检查,然后该页面可以测试某个会话变量是否存在并返回true或false。

作为一个例子,我最近工作的应用程序有一个页面,其客户端逻辑需要检查以确保会话仍然存在。在这种情况下,我知道userID始终存储在Session [“UserID”]中,所以我创建了ac#ajax页面,如果此对象为null则返回false,如果存在则返回true,这允许我从JavaScript调用此页面并告诉会话是否已过期。这可能需要稍微修改以适合您的情况,但我相信您可以使用相同的逻辑做一些事情。