2


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

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

我正在尝试在 c# 中实现类似的东西;

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

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

4

2 回答 2

1

我会在您的代码隐藏页面中推荐一个公共属性:

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

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

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

HTH。

于 2010-07-22T10:43:35.607 回答
0

将此检查放在计时器客户端的建议将在每次运行时延长会话,从而导致会话永不过期,仅当这是所需的功能时才这样做。

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

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

于 2010-07-22T10:39:18.547 回答