JavaWEB中的Cookie

来源:互联网 发布:导游软件 编辑:程序博客网 时间:2024/06/05 20:21

  今天我们来说一说在JavaWEB项目中遇到的Cookie的问题。

  1. 提出问题

  WEB协议是一种无状态协议,即WEB服务器本身并不可以识别出哪些请求是同一个浏览器发出的,因为浏览器的请求都是孤立的。但是,我们希望WEB服务器可以提供一种机制来唯一的标识一个浏览器,并且记录这个浏览器的状态。这里的一个浏览器也可以指代会话对象。

  2.会话和会话状态

  ① 会话:WEB浏览器和WEB服务器之间连续的一系列的请求和响应的过程称之为会话。

  ② 会话状态:指的是WEB浏览器和WEB服务器在会话过程中产生的状态信息,这些状态信息的作用是可以让WEB服务器将同一个会话中的一系列的请求和响应关联起来

  3.WEB服务器实现有状态的会话的两种方式

  有状态的会话,WEB服务器要从大量的请求中分辨出哪些请求属于同一个浏览器,即WEB服务器可以识别同一个浏览器的请求,这就需要WEB浏览器对其发出的每一个请求都进行标识,属于同一个会话中的请求消息都附带同样的标识号,而属于不同的会话当中的请求则总是附带不同的标识号,这个唯一的标识号就是会话ID,即SessionID。

  ① Cookie机制

  ② Session机制

  4.Cookie机制

  ① Cookie机制采用在客户端即浏览器端保存HTTP状态消息的方案

  ② 实现原理

  当浏览器第一次发出请求时,服务器会在相应头中设置一个set-Cookie的响应头字段,同时传递给浏览器一个小文本文件,一旦浏览器保存了某个Cookie,那么它以后每次访问服务器,都会在请求头中添加Cookie字段将其再返回给服务器。

  ③ 一个Cookie只可以标识一种信息,且至少含有一个标识符请求名称name和标识符请求值value。

  ④ 一个web站点可以给同一个浏览器发送多个Cookie,一个浏览器也可以保存多个web站点提供的cookie。

  ⑤ 一般浏览器只允许保存300个cookie,每个站点最多只能有20个cookie,每个cookie的大小限制是4KB。

  5.在servlet中使用cookie

  ① servletAPI提供了一个类Cookie,用来封装Cookie的信息和操作其中信息的方法。

  构造器(String name,String value)  getName() get/setValue()  get/setPath() set/getMaxAge()

  ② HttpServletResponse中提供了一个方法可以将Cookie对象从服务器端返回到浏览器端,addCookie(Cookie cookie)

  ③ HttpServletRequest提供了一个方法可以将Cookie对象从浏览器中的请求中获取出来,getCookies(),返回的是一个Cookie的数组对象。

  6.发送一个Cookie

  ① 在保存在服务器端的JSP中创建一个Cookie对象,其中包含name和value值。

  ② 然后对这个Cookie对象设置最大有效时长,使用setMaxAge()方法,参数的单位是S。

  ③ 将这个Cookie对象从保存在服务器端的JSP中发送到浏览器中,调用response.addCookie(Cookie cookie)方法。

  需要注意的是:默认情况下,若不为某个Cookie对象设置在浏览器存活的最大时长,那么这个Cookie对象在浏览器的生命周期就默认是会话级别的,且会话级别的Cookie存放在浏览器的内存中,当浏览器关闭时,这个Cookie就删除了;而如果对某个Cookie设置了存放浏览器的最大时长,那么这个Cookie就不再是会话级别的Cookie了,它将保存在电脑的磁盘中,直到超过我们设置的最大时长(即使关闭浏览器关闭了一次回话之后,再打开浏览器,这个Cookie依然有效)。我们通过setMaxAge(s)方法来对某个Cookie进行在浏览器上生命周期时长的设定。值为0表示浏览器接收到Cookie对象后立即删除,值为负数表示创建Cookie,置为整数表示当前Cookie存活在浏览器上的时长,单位为秒。

  ④如何删除一个Cookie

  即通过cookie.setMaxAge(0)方法设置这个Cookie对象的存活时长为0,并且调用response.addCookie()方法将这个Cookie对象再返回给浏览器,那么浏览器在接收到响应的时候就会立即删除这个Cookie对象。

  7.设置Cookie的作用路径

  我们知道Cookie对象只可以作用当前Cookie所在JSP文件的同级文件,或其同级文件的子文件,而不可以作用上级文件的同级文件及同级文件的子文件。但是我们希望Cookie可以作用在整个项目工程中,就需要我们在创建好一个Cookie之后调用其setPath()方法来设置当前Cookie作用的路径了。

  需要注意的是,方法的参数可以是/,代表当前WEB应用的根目录,也可以是request.getConteexPath()代表当前WEN站点的根目录。

 

原创粉丝点击