session

计算机网路应用中称为:会话机制.

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

functionrefresh(seconds){

setTimeout("self.location.reload()",seconds*1000);

}

refresh(600);//调用方法启动定时刷新,数值单位:秒。

2、通过meta标签来实现(在页面中添加meta标签refresh也可以指定每隔指定时间就刷新当前页面),示例代码如下:

1

<metahttp-equiv="refresh"content="600"/>

meta标签可以实现每过600秒就刷新一次当前页面。

因此需要在当前页面本身不刷新、不影响用户的任何操作的情况下实现定时刷新。最常见的解决方法仍然有两种。一种是在当前页面添加一个隐藏的iframe,然后在该iframe里面实现定时刷新。

1

<iframeid="hidden_iframe"style="display:none;"scrolling="no"frameborder="0"name="hidden_iframe"src="ping.php"></iframe>

此外,需要在服务器上编写对应的请求响应代码,例如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

functionautoRefresh(seconds){

if(typeofperiod=="undefined"){//如果是第一次执行

period=seconds*1000;//定义全局变量period

varbodyDOM=document.getElementsByTagName("body")[0];

if(bodyDOM){

bodyDOM.innerHTML+='<imgid="auto_refresh_img"src=""style="display:none"/>'//添加隐藏的图片

imgDOM=document.getElementById("auto_refresh_img");//定义全局Image对象

}

}

if(typeofimgDOM!="undefined"){

imgDOM.src="ping.php?sid="+newDate().getTime();//防止缓存

setTimeout("autoRefresh("+seconds+")",period);

}

}

autoRefresh(600);//调用方法启动定时刷新

 

和使用iframe来实现定时刷新一样,使用JavaScriptImage对象实现定时刷新,也需要在服务器端编写类似的请求响应代码。服务器的响应可以是文字等非图片内容,非图片内容只会造成图像加载失败,而图像标签本身就是隐藏的,不管是加载成功还是失败都不会显示,毕竟我们的主要目的是发送请求给服务器,让服务器保持session处于活动状态。

当然,还可以使用Ajax来实现定时刷新,不过使用Image对象会更好一些,因为有些老式浏览器的JavaScript无法实现Ajax,但是却可以使用Image对象。此外,使用Ajax需要编写更多的代码来处理XMLHttpRequest等对象的活动。

在两种方式中,各有其优缺点。

使用iframe标签实现定时刷新的优点是:不需要编写JavaScript代码,可以在浏览器禁用JavaScript的情况下实现定时刷新;其缺点是:在某些不支持iframe标签的老式浏览器中没有效果,此外,iframe标签在浏览器中新增加了一个独立的页面,即使没有显示出来,不过其内部解析的window、document等对象仍然存在,占用的浏览器内存相对较多。

使用Image对象的优点是:与iframe相比,占用的内存相对较少,支持Image的浏览器也相对较多(现代浏览器均支持);缺点是:在浏览器禁用JavaScript的情况下就毫无用武之地了。

开发人员应根据实际需求情况来确定使用何种实现方式更好。此外,服务器在响应定时刷新的请求时,在满足要求的情况下,应返回尽可能少的数据,以节省带宽。 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值