代码之家  ›  专栏  ›  技术社区  ›  VJOY

使用javascript检测会话是否过期

  •  2
  • VJOY  · 技术社区  · 16 年前


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

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

    我正在尝试在C中实现类似的目标。

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

    如果有人知道如何检查会话是否存在,请帮助我。
    事先谢谢。

    2 回复  |  直到 16 年前
        1
  •  1
  •   Brian Mains    16 年前

    我建议您在代码隐藏页中使用一个公共属性,它可以:

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

    以解决即时错误。如果您想让一个轮询机制知道它何时过期,可以考虑JS计时器倒计时/Ajax对服务器思想的调用。如果不从服务器请求信息,就无法从客户端检查会话。

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

    Hth.

        2
  •  0
  •   Gavin    16 年前

    建议将此签入计时器客户端,这样每次运行会话时都会延长会话,从而使会话永不过期,只有当这是所需的功能时才这样做。

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

    作为一个例子,我最近工作的一个应用程序有一个带有客户端逻辑的页面,需要检查以确保会话仍然存在。在本例中,对于该页面,我知道用户ID始终存储在会话[“用户ID”]中,因此我创建了一个C Ajax页面,如果该对象为空,则返回false;如果该对象为真,则返回true;如果该对象存在,则允许我从javascript调用该页面,并告诉会话是否已过期。这可能需要稍微改变一下以适应您的情况,但我相信您可以用相同的逻辑做一些事情。

    推荐文章