Servlet学习之Cookie

来源:互联网 发布:专业电气制图软件 编辑:程序博客网 时间:2024/04/28 13:50

Servlet学习之Cookie

转载请注明出处:http://write.blog.csdn.net/mdeditor#!postId=77284800

预备知识

什么是一次web会话?

​ 会话是web技术中的一个术语,可以简单的理解为:用户打开一个浏览器,点击多个超链接,访问服务器多个web资源,然后关闭浏览器,这个过程称为一个会话。

​ 如果在打开一个浏览器访问一个页面后,再打开一个浏览器访问同一个页面,那这就是有两个会话;而打开一个浏览器访问一个页面后,通过这个页面上的某个超链接是从新的浏览器打开的,那依然只算一个会话。

什么是Cookie

​ Cookies 是存储在客户端计算机上的一小段文本文件,并保留了各种跟踪信息。伴随着用户请求和页面在 Web 服务器和浏览器之间传递。用户每次访问站点时,Web 应用程序都可以读取 Cookie 包含的信息

Cookie的作用

​ 我们在浏览器中,经常涉及到数据的交换,比如你登录邮箱,登录一个页面。我们经常会在此时设置30天内记住我,或者自动登录选项。那么它们是怎么记录信息的呢,答案就是今天的主角cookie了,Cookie是由HTTP服务器设置的,保存在浏览器中,但HTTP协议是一种无状态协议,在数据交换完毕后,服务器端和客户端的链接就会关闭,每次交换数据都需要建立新的链接。就像我们去超市买东西,没有积分卡的情况下,我们买完东西之后,超市没有我们的任何消费信息,但我们办了积分卡之后,超市就有了我们的消费信息。cookie就像是积分卡,可以保存积分,商品就是我们的信息,超市的系统就像服务器后台,http协议就是交易的过程。

Cookie常用场景

1.记录用户的事件

2.浏览历史记录

3.用户名和密码的记录

等待

Cookie的分类

​ cookie分为会话cookie和持久cookie,会话cookie是指在不设定它的生命周期expires时的状态,前面说了,浏览器的开启到关闭就是一次会话,当关闭浏览器时,会话cookie就会跟随浏览器而销毁。当关闭一个页面时,不影响会话cookie的销毁。会话cookie就像我们没有办理积分卡时,单一的买卖过程,离开之后,信息则销毁。

​ 持久cookie则是设定了它的生命周期expires,此时,cookie像商品一样,有个保质期,关闭浏览器之后,它不会销毁,直到设定的过期时间。对于持久cookie,可以在同一个浏览器中传递数据,比如,你在打开一个淘宝页面登陆后,你在点开一个商品页面,依然是登录状态,即便你关闭了浏览器,再次开启浏览器,依然会是登录状态。这就是因为cookie自动将数据传送到服务器端,在反馈回来的结果。持久cookie就像是我们办理了一张积分卡,即便离开,信息一直保留,直到时间到期,信息销毁。

Cookie的细节知识

1.cookie是在服务端创建的

2.cookie是保存在浏览器这端的

3.cookie的生命周期可以通过cookie.setMaxAge();如果不设置,关闭浏览器就destroy了

4.cookie可以被多个浏览器共享

5.怎么理解:把cookie假设成一张表 名字(String):值(String)。所有共享这张表,名字如果重复了就会替换掉存在的cookie值。

6.一个WEB应用可以保存多个cookie

7.cookie存放的时候是以明文方式存放的,因此安全比较低,我们可以通过加密后保存,可以用md5(不可逆)算法加密(想起了base64),经过md5加密后存放到数据库,用户输入密码后加密然后再和数据库里面的匹配。

8.一个web应用可以给浏览器发送多个cookie,一个浏览器可以存储多个web应用提供的cookie。一般只允许存放300个cookie,每个web应用最多放 20个,每个cookie大小4KB,因此不会塞满硬盘,也不会被用作“拒绝服务”攻击手段。

9.cookie的默认生命周期是会话级别的,关闭浏览器后就被删除,可以通过setMaxAge()设置cookie 的生命周期。setMaxAge(0)删除该cookie:要保持path一致,否则无法删除,

如何使用Cookie

Servlet Cookies 方法

以下是在 Servlet 中操作 Cookies 时可使用的有用的方法列表。

序号 方法 & 描述 1 public void setDomain(String pattern)该方法设置 cookie 适用的域,例如 w3cschool.cc。 2 public String getDomain()该方法获取 cookie 适用的域,例如 w3cschool.cc。 3 public void setMaxAge(int expiry)该方法设置 cookie 过期的时间(以秒为单位)。如果不这样设置,cookie 只会在当前 session 会话中持续有效。 4 public int getMaxAge()该方法返回 cookie 的最大生存周期(以秒为单位),默认情况下,-1 表示 cookie 将持续下去,直到浏览器关闭。 5 public String getName()该方法返回 cookie 的名称。名称在创建后不能改变。 6 public void setValue(String newValue)该方法设置与 cookie 关联的值。 7 public String getValue()该方法获取与 cookie 关联的值。 8 public void setPath(String uri)该方法设置 cookie 适用的路径。如果您不指定路径,与当前页面相同目录下的(包括子目录下的)所有 URL 都会返回 cookie。 9 public String getPath()该方法获取 cookie 适用的路径。 10 public void setSecure(boolean flag)该方法设置布尔值,表示 cookie 是否应该只在加密的(即 SSL)连接上发送。 11 public void setComment(String purpose)该方法规定了描述 cookie 目的的注释。该注释在浏览器向用户呈现 cookie 时非常有用。 12 public String getComment()该方法返回了描述 cookie 目的的注释,如果 cookie 没有注释则返回 null。

在Servlet中设置Cookie

1.创建Cookie

Cookie cookie = new Cookie("key","value");//只能传入String类型,不能传入对象,见API

2.通过setMaxAge()来设置Cookie的生命周期

cookie.setMaxAge(7*24*3600);//括号内表示Cookie的最大到期时间,cookie.setMaxAge(-1));//当Web浏览器退出时将被删除。零值会导致cookie被删除。

3.设置cookie路径

cookie.setPath(String url);

4.发送 Cookie 到 HTTP 响应头:可以使用 response.addCookie来添加 HTTP 响应头中的 Cookies,如下所示:

response.addCookie(cookie);

在Servlet中获取Cookie

要读取 Cookies,您需要通过调用 HttpServletRequestgetCookies( ) 方法创建一个 javax.servlet.http.Cookie 对象的数组。然后循环遍历数组,并使用 getName() 和 getValue() 方法来访问每个 cookie 和关联的值。

Cookie[] cookies = null;// 获取与该域相关的 Cookies 的数组cookies = request.getCookies();for(Cookie cookie : cookies){  //通过getName()和getValue()方法取出cookie的键和值  String name = cookie.getName();  String value = cookie.getValue();}

删除Cookie

删除 Cookies 是非常简单的。如果您想删除一个 cookie,那么您只需要按照以下三个步骤进行:

  • 读取一个现有的 cookie,并把它存储在 Cookie 对象中。
  • 使用 setMaxAge() 方法设置 cookie 的年龄为零,来删除现有的 cookie。
  • 把这个 cookie 添加到响应头。
//这里的cookie可以通过上述获取方法来获取,并根据getName()返回的值进行判断,当前获取的cookie是否为目标cookiecookie.setMaxAge(0);response.addCoookie(cookie);//必须带,相当于执行语句
原创粉丝点击