我正在使用ASP.Net创建一个Web应用程序。我正在申请中使用会话。
有一种情况我试图通过Javascript访问会话变量。当我在正常状态下访问它时它工作正常。但是在会话到期后,如果单击任何按钮,它会抛出异常并且行为异常,导致找不到页面。
这是我正在使用的代码;
var TransactionID = '<% =((Hashtable)(Session["SessionData"]))["TransactionID "] %>';
if(TransactionID !='')
{
//action
}
我正在尝试在c#中实现类似的排序;
String lsStr;
if(null != lsStr)
{
//action
}
请帮助我,如果有人知道如何使用javascript检查会话是否存在。
提前谢谢。
答案 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调用此页面并告诉会话是否已过期。这可能需要稍微修改以适合您的情况,但我相信您可以使用相同的逻辑做一些事情。