1、 Cookie 概述 Cookie 技术有 Netscape 首创和使用,而后也受到 Microsoft IE 的支持。现在绝大多数浏 览器都支持这项技术,虽然在很多浏览器中设定为“禁用”( disable )状态。 Cookie 是用来保存用户信息的。一个 Cookie 是一则短小消息,首先在处理客户的第一次请求时由 Web 服务器传给客户浏览器。当浏览器收到从服务器传来的 Cookie 后,会以名称—值( name — value )的形式记录用户访问当前网站的一些数据(例如用户 ID 、密码、访问该网站的次数和上次访问该网站的时间等),并将这些数据保存在客户端。在随后的每次请求中,数据从浏览器中传回到服务器,这样服务器就可以对用户进行跟踪了。 Cookie 的工作过程是,首先浏览器向服务器提出页面请求,服务器在响应中给客户分配一个 ID 传给浏览器,浏览器在随后的每次请求中都携带分配给它的 ID ,这样服务器在处理请求时就知道其来源了。 Servlet 是通过将 Cookie 加到响应的头部发送给客户的,而客户则将之加到请求的头部,自动返还给服务器。 Servlet API 中用于创建和设定 Cookie 的类是 javax.servlet.http. Cookie 。创建方法为: public Cookie(String name , String value ) 该方法以给定的名称和值创建一个 Cookie 对象。几个 Cookie 可以具有同一名称。值的更改可用方法 setValue 实现。 Cookie 的属性如下:
使用 Cookie 时应注意以下几点: □前面已提到, Cookie 是通过 HTTP 头部传递的,因此设置 Cookie 要在输出任何响应之前。也就是说,如果用 Writer 给客户返回文本数据,那么必须在使用 Writer 之前,调用响应对象的 addCookie 。 □在设置 Cookie 时最好加上作用路径和作用域等参数。因为如果用户访问的其他网站有同名的 Cookie 变量,那么用户的 Cookie 有可能被覆盖掉。 □客户浏览器对 Cookie 有限制,要求每个 Cookie 不超过 4KB ,每个站点最多接受 20 个 Cookie ,每个用户最多 300 个。 □ Cookie 的安全性是个受人关注的问题。由于 Cookie 能向客户机读写数据,因此很多人认为使用它不安全,而且 Cookie 能记录用户访问站点的信息,这有损于用户的隐私。因此很多浏览器都提供禁用 Cookie 的功能。
2、 Session 概述 Cookie 只能存放小量信息,而且使用范围有一定的限制。 Servlet 内置的 Session 跟踪功 能比 Cookie 更强。 Session 跟踪是一种机制, Servlet 利用它在一定的时间内对源自同一客户的一系列请求的状态进行跟踪,并且保存有关用户的信息。一个 Session 通常对应于一个用户,而该用户可以多次访问同一网站。 Session 可以被同一客户存取的若干个 Servlet 共享,因此是 Servlet 之间交换客户信息的一种手段。它与 Cookie 一样也是以名称—值的形式保存信息的,但不同的是, Session 保存的数据可以是对象类型的,而且保存在 Web 服务器端,而不像 Cookie 那样保存在客户端。与 Cookie 一样, Session 也是有有效期的。 Servlet API 提供的有关 Session 的接口是 javax.servlet.http.HttpSession 。创建和获取用户的 Session 则应该调用请求对象的 getSession 方法。 public HttpSession HttpServletRequest.getSession(Boolean create) 它返回与做出请求的客户相关联的 Session 。当用户尚未有 Session 时,该方法便为之创建一个(如果参数 create 为 true )或者返回 null (如果参数设为 false )。通常情况下,参数应该取 true 。 一般情况下,当用户关闭浏览器、转到别的网站或者离开客户机长久不用时,当前的 Session 应该失效。但由于服务器并不能探测上述事件,因而只好为 Session 设定有效期。当客户在一段时间内没有作请求时,服务器认为用户不再使用该网站,从而不在维持 Session 的有效性。为一个 Session 单独设定有效期的方法是 HttpSession 的 setMaxInactiveInterval ,参数以秒为单位。实际上, Session 的默认有效期可以在 Web 应用的发布描述器 web.xml 中配置。 …… <web-app> <session-config> <session-timeout> 60 </session-timeout> <!—minutes--> </session-config> …… </web-app> |