计算机网路应用中称为:会话机制.
session对象存储特定用户所需的属性及配置信息.
这样用户在应用程序的web页面之间跳转,存储在session对象中的数据不会丢失,而是在整个用户会话中一直保存下去(session有效期内).
当用户请求来自应用程序的 Web页时,如果该用户还没有会话,则Web服务器将自动创建一个 Session对象。当会话过期或被放弃后,服务器将终止该会话。
<session-config><session-timeout>30</session-timeout></session-config>
HttpSession session
session.setMaxInactiveInterval(300);
session.setAttribute("loginName","uesrName");
(String) session.getAttribute("loginName");
这里的30表示session的超时时间,单位为分钟,如果用户登录后在30分钟内没有与服务器交互,那么当前用户的session将失效。我们可以配置一个更大的数值(比如60),就可以延长session的超时时间,如果将该值改为0或负数的话,则表示session永不失效。
一些在线网站均采用定时刷新页面的方法来防止session超时
定时刷新页面,最常见的有两种实现方式:一种是通过JavaScript+HTMLDOM,另一种则是通过meta标签来实现。
1、JavaScript+HTMLDOM,示例代码如下:
1 2 3 4 |
|
2、通过meta标签来实现(在页面中添加meta标签refresh也可以指定每隔指定时间就刷新当前页面),示例代码如下:
1 |
|
meta标签可以实现每过600秒就刷新一次当前页面。
因此需要在当前页面本身不刷新、不影响用户的任何操作的情况下实现定时刷新。最常见的解决方法仍然有两种。一种是在当前页面添加一个隐藏的iframe,然后在该iframe里面实现定时刷新。
1 |
|
此外,需要在服务器上编写对应的请求响应代码,例如ping.php中可以编写如下代码:
<?php
//每隔600秒刷新当前页面
echo
'<html><head><metahttp-equiv="refresh"content="600"/></head><body></body></html>'
;
?>
另外一种则是使用JavaScriptImage对象来实现定时刷新,JavaScript代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
|
和使用iframe来实现定时刷新一样,使用JavaScriptImage对象实现定时刷新,也需要在服务器端编写类似的请求响应代码。服务器的响应可以是文字等非图片内容,非图片内容只会造成图像加载失败,而图像标签本身就是隐藏的,不管是加载成功还是失败都不会显示,毕竟我们的主要目的是发送请求给服务器,让服务器保持session处于活动状态。
当然,还可以使用Ajax来实现定时刷新,不过使用Image对象会更好一些,因为有些老式浏览器的JavaScript无法实现Ajax,但是却可以使用Image对象。此外,使用Ajax需要编写更多的代码来处理XMLHttpRequest等对象的活动。
在两种方式中,各有其优缺点。
使用iframe标签实现定时刷新的优点是:不需要编写JavaScript代码,可以在浏览器禁用JavaScript的情况下实现定时刷新;其缺点是:在某些不支持iframe标签的老式浏览器中没有效果,此外,iframe标签在浏览器中新增加了一个独立的页面,即使没有显示出来,不过其内部解析的window、document等对象仍然存在,占用的浏览器内存相对较多。
使用Image对象的优点是:与iframe相比,占用的内存相对较少,支持Image的浏览器也相对较多(现代浏览器均支持);缺点是:在浏览器禁用JavaScript的情况下就毫无用武之地了。
开发人员应根据实际需求情况来确定使用何种实现方式更好。此外,服务器在响应定时刷新的请求时,在满足要求的情况下,应返回尽可能少的数据,以节省带宽。