专注Java教育14年 全国咨询/投诉热线:400-8080-105
动力节点LOGO图
始于2009,口口相传的Java黄埔军校
首页 hot资讯 实现Session时间永久有效的方法

实现Session时间永久有效的方法

更新时间:2021-11-18 10:07:31 来源:动力节点 浏览1136次

原理:在B/S系统中,如果用户在Session超时时间前与服务器进行了交互,那么将不会超时。所以我们只要模拟用户在Session超时前和服务器进行交互就可以实现Session的永久有效。

具体实现:网路上有很多中方法实现了以上原理,从而实现了Session的永久有效。我也是参考了众多方法,然后将我尝试成功的一个方法记录一下。

1. 将如下JavaScript代码放置在系统使用中一直显示的页面中,如在框架页面中,你可以将如下代码放置在Banner框架、Bottom框架、左侧一直显示的菜单框架,或者是一个隐藏框架中。如果是非框架页面,那么可以放置在不会被用户关闭的页面中,如主菜单页面。这样的目的是保证页面始终存在,从而其中的JavaScript代码可以是中在执行。

<!-- 用于从服务器上请求.aspx文件的JavaScript脚本块; -->
 < script language = " javascript "  id = " KeepSessionAliveScriptBlock " >
 </ script >
 < script language = " javascript " >
    // 用于循环调用服务器.aspx文件的JavaScript函数;
     keepSessionAlive();
 </ script >

2. 在.js文件中添加keepSessionAlive()函数,函数体如下:

 /**
   *summary: 通过定时请求服务器的某个页面(.aspx)文件来保证Session不会超时。
 *created: liguozhu(李国珠)
   *modifty,content: [修改者,修改内容说明]
   *
   *created time: 2007-11-22
   */
    function  keepSessionAlive()
    {
        document.all["KeepSessionAliveScriptBlock"].src = "/BJAssess/YearAssessSubSystem/Resource/WebForm3.aspx?RandStr="+Math.random();
        //这里的RandStr=Math.random只是为了让每次back.src的值不同,防止同一地址刷新无效的情况
        window.setTimeout("keepSessionAlive()",30000); 
   }

这里document.all["KeepSessionAliveScriptBlock"] 这里引用了页面上<script language="javascript" id="KeepSessionAliveScriptBlock"></script>的程序块对象,其中的src属性指向的是需要打开的文件。一般src 应该指向的是.js文件,这个效果就是将js文件中的内容加入到程序块中,然后再进行执行。如:src = "testJS.js", 而testJS.js文件中如果有一句window.alert("Life Is Good!");,那么执行了代码后页面会弹出"Life Is Good"的信息提示框。其实javascript程序块的src属性并不会在意引用的是否是.js文件,它仅仅是打开指定的文件,然后将文件内容按照JavaScript的方式进行执行,当然如果你打开文件的内容中不是合法的JavaScript内容,那么将不执行内容。

这里设置src的页面路径需要注意的是为了防止各个调用页面的路径不同,这里建议采用自上而下的路径方式,如例子中的路径就是BJAssess项目,然后一级级的找到需要调用的.aspx页面文件。为了放置IE读取缓存的情况,这里在读取.aspx页面文件的URL中增加一个随机数。

window.setTimeout用于定时(例子中设置的是3000毫秒,即半分钟)重复执行keepSessionAlive()一次,这里的时间可以自行设置为小于Session超时的任何时间。这个每隔半分钟的请求WebForm3.aspx页面的操作就是实现了前面“原理”中描述模拟用户操作和服务器进行交互,从而保证Session不超时的功能。

3. 在对应的路径下建立一个用于请求的.aspx页面文件,例子中是WebForm3.aspx。这里需要在HTML源码模式将所有HTML代码删除,因为如果不删除这些代码,ASP.NET在解析.aspx文件后会产生一个完整的HTML页面代码,这样如果再嵌到前面的<script language="javascript"></script>脚本块中就会由于<html>, <head>, <body>

等标签出现重复而保错,在IE中显示的错误是“语法错误”。写到这里,可能会有人说既然不能产生完整的HTML页面代码,那么为什么不直接使用.ascx(用户自定义Web控件)呢?直接请求.ascx是不行的,我目前想到的原因是“你在浏览器中是无法直接请求一个.ascx文件的”,如果你在浏览器中直接请求.ascx那么浏览器会返回无法访问的错误。所以你在javascript.src = "xxx.ascx"文件的时候,实际上是请求不成功的。

到此为止实现永久Session的步骤就完成了。这里还需要特别说明一下,在网络上看到有些帖子说需要在请求的页面,如:.aspx页面中调用代码Session("xxx") = "xxx"。其中Session("xxx")是随便的一个Session值,目的是为了调用Session来保证Session不过期,实际上这个操作是没有必要的,原因是(在.NET Framework 1.1的环境下)在请求系统页面的时候,如最常见的是请求Login.aspx界面,这个时候针对此次回话的SessionID和Session就已经生成了,其他所有的Session("xxx")操作都是对于这个Session列表中具体Item的操作。所以只要你与服务器进行了交互,那么服务器就会验证你的SessionID,对应的Session是否过期,如果没有,那么就延后过期时间。

以上就是关于“实现Session时间永久有效的方法”的介绍,如果您想了解更多相关知识,不妨来关注一下动力节点的Spring Session教程,里面的课程内容丰富,适合没有基础的小白学习,希望对大家能够有所帮助。

提交申请后,顾问老师会电话与您沟通安排学习

免费课程推荐 >>
技术文档推荐 >>