本文小编为大家详细介绍“Session超时问题怎么解决”,内容详细,步骤清晰,细节处理妥当,希望这篇“Session超时问题怎么解决”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。
成都创新互联公司坚持“要么做到,要么别承诺”的工作理念,服务领域包括:网站设计、成都网站设计、企业官网、英文网站、手机端网站、网站推广等服务,满足客户于互联网时代的景泰网站设计、移动媒体设计的需求,帮助企业找到有效的互联网解决方案。努力成为您成熟可靠的网络建设合作伙伴!
众所周知,当用户登录网站后较长一段时间没有与服务器进行交互,将会导致服务器上的用户会话数据(即session)被销毁。此时,当用户再次操作网页时,如果服务器进行了session校验,那么浏览器将会提醒用户session超时。
那么,如何解决用户登录后较长时间未操作而导致的session失效的问题呢?
导致这个问题的关键词有两个:一个是“长时间”,一个是“未操作”。
1.如果用户未操作的“长时间”超过了服务器配置的session超时时间,并导致session失效,那么我们延长session的超时时间,让用户原来的“长时间”与超时时间相比,变得不“长”,不就可以解决了吗?
2.如果用户是长时间“未操作”导致session失效,那么我们想办法产生“操作”,让用户每隔一小段时间就“操作”一次,与服务器产生交互,那么session自然也不会失效。
一般情况下下,我们首先想到的是,通过改变服务器的配置,延长服务器的session超时时间。
例如,在Tomcat服务器的web.xml文件中有如下节点内容:
30
这里的30表示session的超时时间,单位为分钟,如果用户登录后在30分钟内没有与服务器交互,那么当前用户的session将失效。我们可以配置一个更大的数值(比如60),就可以延长session的超时时间,如果将该值改为0或负数的话,则表示session永不失效。
不过在实际的工作应用中,一味地上调session的超时时间设置并不怎么常见,大多数需要实现该功能的网站都将解决问题的焦点集中在第二条思路上。例如:一些在线网站均采用定时刷新页面的方法来防止session超时。
定时刷新页面,最常见的有两种实现方式:一种是通过JavaScript + HTML DOM,另一种则是通过meta标签来实现。
function refresh(seconds){ setTimeout("self.location.reload()", seconds * 1000); } refresh(600); //调用方法启动定时刷新,数值单位:秒。
在页面中添加meta标签refresh也可以指定每隔指定时间就刷新当前页面,示例代码如下:
上述meta标签可以实现每过600秒就刷新一次当前页面。
在上述两种方案中,较好的为第二种,因为如果当前页面是在IE浏览器的模式窗口中打开的,默认情况下,self.location.reload()
方法将会失效,而refresh meta标签在IE模式窗口下仍然有效。
上述两种方式都实现了刷新当前页面,并且使用起来非常简单,不过很遗憾的是,它们存在一种几乎致命的缺陷。 试想一下,如果在论坛发帖等需要用户输入内容的页面,用户花费较长的时间输入了许多文本内容,可是突然遇到了一个定时页面刷新,结果用户输入的所有内容都没了,估计这个时候用户连掐死你的心都有了……
因此我们需要在当前页面本身不刷新、不影响用户的任何操作的情况下实现定时刷新。最常见的解决方法仍然有两种。
一种是在当前页面添加一个隐藏的iframe
,然后在该iframe
里面实现定时刷新。
此外,我们需要在服务器上编写对应的请求响应代码,例如ping.php
中可以编写如下代码: