会话机制的一些解释与session对象

1.会话机制

用户在浏览器某个网站时,从进入网站到浏览器关闭或离开该网站所经过的这段时间,也就是在这个网站连续访问的期间,称为一个会话。当一个客户访问一个服务器时,可能会在这个网站的几个页面进行反复连接,反复刷新一个页面,由于HTTP协议是无状态协议,此次连接无法得到上次连接的状态,同一个用户的多次访问数据的维护无法由HTTP协议自身完成,而网站的应用程序应当通过某种方法来维护同一个客户访问的数据,这就是会话机制。不同客户、不同服务器以及在不同时间内的连续操作都是处在不同的会话中。
正如一个电子商城的实现那样,java web应用通常使用javax.servlet.http.HttpSession类的子类的对象session来维护会话,不同的会话由不同session对象来维护,。session对象的标识(即session对象的ID)在用户第一次访问web应用时服务器自动产生并保持唯一性,对于网站用户来说,这个session的ID实际上是不用关心的,而网站的开发时,可以使用session的特定方法来获取对应的ID值。
用session对象来保存每个用户的状态信息,以便在HTTP协议下也能跟踪每一个用户的操作状态,其中session对象本身保存在服务器上,而把session的ID随响应一起发送并保存在客户机的Cookie中,当客户再次访问同一web应用时,该ID又随请求再次发送到服务器,服务器根据此ID查询所有session对象,如果找到匹配的session对象,则可在这个session对象上取出属于该用户的状态信息,实现非连接下的状态维护。在很多服务器上,如果测试用户浏览器支持Cookie,就直接使用Cookies保存session对象的ID,如果不知此或者由于用户禁用了Cookie,就自动使用URL-rewriting(URL重写)技术保存session对象的ID。直到用户端用户关闭浏览器后,服务器端的session对象才会被注销,进而和用户的会话对应关系消失。当客户端重新打开浏览器再连接到该服务器时,服务器尤为该客户再创建一个新的session对象,实现一个新的会话维护。

2.session对象的常用方法

session对象为维护会话信息的每个流程提供了方便的存取信息方法,重用的方法如下:
(1)public String getId():返回session创建时jsp引擎为它设的唯一ID,每个session的ID都不同。
(2)public void setAttribute(String key,Object obj)将参数Object指定的对象obj添加到session对象中,并为添加的对象属性指定一个索引关键字。
(3)public Object getAttribute(String key):获取session对象中含有关键字的属性对象。
(4)public Boolean isNew():判断对象是否是一个新建的session对象。
其他的一些方法:
(1)long getCreationTime()取得session产生的时间,单位是毫秒。
(2)long getLastAccessedTime():返回此session中客户端最近请求一次的时间。
(3)int getMaxInactiveInterval():取得最大session失效的时间,若相邻两次请求超过这个时间,session将会失效,以负值标识session则永远不会超时。
(4)void setMaxInactiveInterval():设定最大session失效的时间。
(5)String[] getValueNames():返回一个包含此session所有可用属性名称的数组。
(6)void invalidate():取消session对象,并将对象存放的内容删除。
(7)void removeValue(String name):删除session对象中指定的属性。
(8)Enumeration getAttributeNames():返回session对象存储的每一个属性对象,其结果为枚举类型
(9)long getLastAccessedTime():返回和当前session对象相关的客户端最后发送请求的时间,最小的单位为毫秒。

3.扩充实例

新建sessionJsp.jsp页面,代码如下
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    
    <title>My JSP 'sessionJSP.jsp' starting page</title>
    
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">    
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">

  </head>
  
  <body>
session的创建时间:<%=session.getCreationTime() %>&nbsp;&nbsp;
<%=new Date(session.getCreationTime()) %><p>
session 的id:<%=session.getId() %><p>
客户端最后一次请求的时间:<%=session.getLastAccessedTime() %>&nbsp;&nbsp;
<%=new java.sql.Time(session.getLastAccessedTime()) %>
两次请求间隔多长时间此session被取消(ms):
<%=session.getMaxInactiveInterval() %><p>
是否是新创建的一个session:<%=session.isNew()?"yes":"no" %><p>
<%
for(int i = 0;i<session.getValueNames().length;i++){
out.println(session.getValueNames()[i]+"="+session.getValue(session.getValueNames()[i]));
}

%>
<!-- 返回的是从格林尼治时间(GMT)1970年1月1日0:00:00起计算当时的毫时数 -->
  </body>
</html>


第一次访问的结果图片:

刷新后的结果图片:

如果对该页面进行刷新操作,页面显示“是否新建一个新的session:no”,表示这次请求还是同一个session,不同于第一次访问时会产生新的session对象。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值