HTTP会话跟踪

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/LY121600HACKER/article/details/78494513

1.会话的基本慨念

(1).什么是会话
在web应用中把客户端浏览器开始请求web服务器,访问不同web文档进行请求/响应,到结束访问的一系列过程称为会话。
一次会话可能包含对web服务器上多个文档的多次请求,也可能包括对一个servlet的多次请求。

(2).会话跟踪
web应用需要在用户访问的一个会话内,让web服务器保存客户的信息,如客户的账号或客户的购物车,这称为会话跟踪。在一个会话内,当客户再次访问时,服务器能够定位是先前的同一客户。

(3)JavaEE会话跟踪方法
①.重写URL
②.隐藏表单字段
③.Cookie
④.HttpSession对象API

2.URL重写

(1).URL重写的实现
通过请求URL地址后面附加参数来完成。

<a href="../product/main.do? userid="1001"&category=1">

以?name=value的形式附加在URL后,多个参数用&符号间隔。

取得参数的代码:

String userid=request.getParamter("userid");

(2).URL重写的缺点
①.使URL地址过长
②.不同浏览器对URL传递参数的限制不同
③.安全性缺陷
④.编程复杂

3.隐藏域表单

(1).隐藏域表单的实现
将会话数据放置在隐藏域文本域元素中,随着表单的提交而发送到Web服务器,服务器Web组件使用请求对象的方法获取。

<form action="../product/main.do" method="post" >
    <input type="hidden" name="userid" value="${userid}" />
    <input type="submit" value="提交" />
 </form>

(2).隐藏域的缺点
①.安全性差
②.编程复杂
③.无法使用超链接

4.Cookie

(1).什么是Cookie
Cookie是Web服务器保存在客户端的小的文本文件,存储许多name/value对,可以在这些name/value对中保存会话数据。

(2).Cookie API

①.Cookie对象的创建

Cookie cookie01=new Cookie("userid","1001");

②.取得Cookie对象的名称

String name=cookie01.getName();

③.取得Cookie对象中的值

String userid=cookie01.getValue();

④.Cookie对象在客户端保存的有效期限,以秒为单位

int times=cookie01.getMaxAge();

⑤.取得Cookie对象的有效路径

String path=cookie01.getPath();

⑥.取得Cookie对象的使用版本

int version=cookie01.getVersion();

⑦.取得Cookie对象的有效域

String domain=cookie01.getDomain();

⑧. 设置Cookie对象的新值,取代旧值

cookie.setValue("1002");

⑨.设置Cookie对象新的有效期和有效目录

(3).将Cookie保存到客户端

①.创建Cookie对象

String userid=request.getParameter("userid");
Cookie cookie=new Cookie("userid","userid");

②.设置Cookie属性

cookie.setMaxAge("7*24*60*60");

③.发送Cookie到客户端

response.addCookie(cookie);

(4).Cookie的缺点
①.Cookie只能保存S听类型的键值对,无法保存一般表达业务对象的JavaBean类型对象
②.存储位置限制
③Cookie大小受浏览器限制
④Cookie可用性限制
⑤安全性缺陷

5.HttpSession对象

(1).JavaEE会话对象
JavaEE规范中为克服以上会话跟踪方法的缺点,提出了一个服务器端实现会话跟踪的机制,即HttpSession接口,实现该接口的对象称为Session对象。Session对象保存在Web服务器上,每次会话过程创建一个,为用户保存各自的会话信息提供全面的支持。

(2).会话对象的类型与获取
JavaEE会话对象的类型是接口javax.servlet.http.HttpSession
获取的方法有两种,一种无参,一种有参。

HttpSession session=request.getSession();

如果Web浏览器内没有此客户的会话对象,则Web容器会创建新的会话对象并返回;如果已存在会话对象,则直接返回此对象的引用。

HttpSession session=request.getSession(false);

如果参数为true,与无参的getSession方法相同,有会话对象直接引用,无会话对象则先创建再返回;如果参数为false,存在会话对象则直接返回对象引用,无会话对象则返回null,Web容器不会自动创建会话对象。

(3).会话对象的功能与方法

①.将数据存入会话对象

HttpSession session=request.getSession();
session.setAttribute("userid","mirror6");

②.取出保存在会话中指定名称属性的对象

String userid=session.getAtrribute("userid");

③.移除保存在会话中指定名称属性的对象

session.removeAttribute("userid");

④.取得会话对象中保存的所有属性名称列表

Enumeration enum=session.getAttributeNames();
while(enum.hasMoreElements()){
    String name=(String)enum.nextElement();
    out.println(name);
}

⑤.设置会话的失效期限,以秒为单位

session.setMaxInactiveInterval(12*60*60);

⑥.取得会话的有效间隔

int time=session.getMaxInactiveInterval();

⑦.立即迫使会话对象失效

session.invalidate();

⑧.测试会话对象是否刚刚建好

boolean b=session.isNew();

⑨.取得会话对象的ID

session.getId();

(4).会话对象的生命周期
①.创建
首次访问Servlet/JSP时,Web容器会创建会话对象
②.活动
在一个会话有效期内的所有请求,将共享一个会话对象
③.销毁
客户端浏览器关闭的时候或执行invalidate方法

猜你喜欢

转载自blog.csdn.net/LY121600HACKER/article/details/78494513