本文小编为大家详细介绍“Session时间永久有效怎么实现”,内容详细,步骤清晰,细节处理妥当,希望这篇“Session时间永久有效怎么实现”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。
原理:在B/S系统中,如果用户在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时间永久有效怎么实现”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注亿速云行业资讯频道。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。