以前每次见Cookie都想起超市里面的曲奇饼干,后来发现浏览器里面也有cookie,今天就来说说我对cookie的理解。

(一) Cookie

(1)什么是cookie?

          ①cookie翻译成中文:甜饼(饼干)

              作为对象诞生于服务器端,并被服务器在客户端浏览器第一次访问服务器时,发送到客户端浏览器,并驻留在客户端浏览器中,或者客户端的主机硬盘内。

          ②客户端浏览器在第二次及后续访问服务器的过程中,总是将cookie对象以请求报头(Cookie:)的形式,发送给服务器。

          ③服务器通过接受cookie,来识别用户。

(2)cookie的作用

           可以利用Cookies包含信息的任意性来筛选并经常性维护这些信息,以判断在HTTP传输中的状态。Cookies最典型的应用是判定注册用户是否已经登录网站,用户可能会 得到提示,是否在下一次进入此网站时保留用户信息以便简化登录手续,这些都是Cookies的功用。另一个重要应用场合是“购物车”之类处理。用户可能会在一段时间内在同一家网站的不同页面中选择不同的商品,这些信息都会写入Cookies,以便在最后付款时提取信息。

           cookie是一种中性的对象(不是恶意的对象),目前Cookies 最广泛的是记录用户登录信息,跟踪用户的偏好,这样下次访问时可以不需要输入自己的用户名、密码了。当然这种方便也存在用户信息泄密的问题,尤其在多个用户共用一台电脑时很容易出现这样的问题。

(3)如何创建Cookie对象?

         new Cookie(name, value);

         Cookie对象常常由名值对构成,名和值一般都是字符串。

(4)如何发送Cookie对象呢?

         服务器通过response对象,以添加报头(Set-Cookie:)的方式进行发送。

         原理:将cookie对象设置到响应报头里进行发送

         发送中文Cookie,需要进行URLEncoder的utf-8的编码,获取中文Cookie时,需要URLDecoder的utf-8的解码。

(5)Cookie的时效性

          ①Cookie默认是驻留在浏览器的内存中,因此关闭浏览器,cookie将消失。也可以:

              cookie.setMaxAge(-1);  // 默认的实效性

          ②可以通过Cookie对象的setMaxAge方法,设置Cookie的时效性。即MaxAge>0,即使关闭浏览器,Cookie会驻留在客户端的硬盘上。

              例如:cookie.setMaxAge(365*24*60*60);//自动删除

          ③删除cookie的方法是:cookie.setMaxAge(0);//主动删除

(6)Cookie的路径:

          ①Cookie的默认路径,是生成它的web组件的路径;

               比如:http://localhost/web/servlet/sendcookie

          ②有效路径是指,cookie从浏览器返回服务器时,能够接受它的路径。

               例如:生成cookie的web组件的路径及其子路径。

               比如:http://localhost/web/servlet/sendcookie 发送了一个名称为nam1的Cookie对象,则

                           http://localhost/web/servlet/other.jsp,可以接收Cookie

                           http://localhost/web/servlet/sub/other2,也可以接收;

               但是,http://localhost/web/jsp/other2.jsp,就不能接收;

                            http://localhost/web/other3.jsp,也不能接收该Cookie对象。

(7)Cookie对象的不足之处:

         ① 客户端浏览器可以禁用Cookie,导致服务器通过cookie跟踪客户不可靠。

         ② Cookie对象携带的信息量有限,一般是4k左右;

         ③ Cookie不是十分安全。

 

(二)URL重写

 

         当浏览器禁用了cookie某些功能就无法实现,比如购物车就无法记住用户的选择,这时就需要就行url重写

(1)什么是url重写?

          通过response对象的URL的重写方法,针对目标地址(链接、表单提交、重定向)添加";sessionid=...."。

(2)为什么要进行url重写?

          因为session对象用于跟踪用户的cookie机制在客户端浏览器被禁用,因此服务器采用URL重写的方式,跟踪用户。

(3)如何进行URL重写?

           利用response对象所提供的两个方法:

            ①response.encodeURL();//用于普通链接或者是表单提交

            ②response.encodeRedirectURL();//专门用于重定向

          默认情况下,只要jsp页面一执行,该jsp页面就会产生一个session对象

 

(三)用户的跟踪涉及到用户的状态管理

(1)什么是用户的状态管理?

          用户在客户端多次与服务器进行交互,将这些交互作为一个整体,记录下来,视为客户端同一客户的操作状态。

(2)用户的状态管理涉及两项技术:

          ①cookie 客户端技术

          ②session服务端技术

              session和cookie的作用几乎是相同的,最大的区别是session是放在服务器端的,而cookie是在客户端的。

(四)使用Session技术,来跟踪客户

(1)什么是Session技术?

         ①Session是由服务器创建的对象;

         ②始终驻留在服务器;

         ③在客户端浏览器第一次访问服务器时,服务器会将Session对象的id属性以cookie的形式发送给客户端浏览器;

            设置响应报头:Set-Cookie:JSessionId=kllkk...;

            服务器也可以以URL重写的方式,来用SessionId标识客户端浏览器的访问。所以即使客户端浏览器禁用cookie,服务器仍然可以跟踪客户。

        ④客户端浏览器在第二次及后续访问服务器时,会将含有SessionId的cookie返还给服务器。因此服务器将根据SessionId来识别用户。

(2)如何创建Session对象?

          HttpSession session=request.getSession();

          ①第一次访问时,服务器将自动创建一个session对象,并通过request.getSession()方法返给用户使用。

          ②第二次及后续的访问时,服务器将根据客户端浏览器返回的SessionId号,去查找并返回已创建的Session对象。

(3)Session对象有哪些常见的属性呢?

          ① 标识属性(id)及创建时间(createTime);

          ② Session对象的时效性:maxInactiveInterval,默认值是30分钟

          ③ 利用Session对象绑定数据(其它对象),那么数据(其它对象)将被视为是Session对象的属性。

               (a)session.setAttribute("属性名",对象);

               (b) session.getAttribute("属性名");

(4)删除Session对象的方法

          session.invalidate();该方法将立即删除session对象;