cookie

cookie
1、cookie简介
1、什么是cookie
cookie,有时我们也用其复数形式cookies,是服务端保存在浏览器端的数据片段。以key/value的形式进行保存。每次请求的时候,请求头会自动包含本网站此目录下的cookie数据。网站经常使用这个技术来识别用户是否登陆等功能。
简单的说,cookie就是服务端留给计算机用户浏览器端的小文件。

 HTTP是无状态协议,服务器不能记录浏览器的访问状态,也就是说服务器不能区分中两次请求是否由一个客户端发出。这样的设计严重阻碍的Web程序的设计。如:在我们进行网购时,买了一条裤子,又买了一个手机。由于http协议是无状态的,如果不通过其他手段,服务器是不能知道用户到底买了什么。而Cookie就是解决方案之一。
 Cookie实际上就是服务器保存在浏览器上的一段信息。浏览器有了Cookie之后,每次向服务器发送请求时都会同时将该信息发送给服务器,服务器收到请求后,就可以根据该信息处理请求。
 例如:我们上文说的网上商城,当用户向购物车中添加一个商品时,服务器会将这个条信息封装成一个Cookie发送给浏览器,浏览器收到Cookie,会将它保存在内存中(注意这里的内存是本机内存,而不是服务器内存),那之后每次向服务器发送请求,浏览器都会携带该Cookie,而服务器就可以通过读取Cookie来判断用户到底买了哪些商品。当用户进行结账操作时,服务器就可以根据Cookie的信息来做结算。

 Cookie的用途:
网上商城的购物车
保持用户登录状态

 Cookie的缺点
Cookie做为请求或响应报文发送,无形中增加了网络流量。
Cookie是明文传送的安全性差。
Cookie中保存数据是不稳定的,用户可以随时清理cookie
各个浏览器对Cookie有限制,使用上有局限

2、庐山真面目
chrome的cookie位置:
C:\Users\lfy\AppData\Local\Google\Chrome\User Data\Default\Cookies

ie中cookie位置:
C:\Users\lfy\AppData\Local\Microsoft\Windows\InetCache
点击设置->查看对象即可

chrome中查看cookie

cookie如上图所示
从上图可以看出cookie是键值对的形式,有过期时间(Max-Age,session表示在这个会话期内有效)。

3、cookie原理
 Cookie的原理:

1、总的来看Cookie像是服务器发给浏览器的一张“会员卡”,浏览器每次向服务器发送请求时都会带着这张“会员卡”,当服务器看到这张“会员卡”时就可以识别浏览器的身份。
实际上这个所谓的“会员卡”就是服务器发送的一个响应头:

 如图Set-Cookie这个响应头就是服务器在向服务器发“会员卡”,这个响应头的名字是Set-Cookie,后边JSESSIONID=95A92EC1D7CCB4ADFC24584CB316382E和 Path=/Test_cookie,是两组键值对的结构就是服务器为这个“会员卡”设置的信息。浏览器收到该信息后就会将它保存到内存或硬盘中。
2、当浏览器再次向服务器发送请求时就会携带这个Cookie信息:

这是浏览器发送的请求报文,中间画红框的就是Cookie信息,这里可以理解为浏览器这次带着“会员卡”再次访问服务器。于是服务器就可以根据Cookie信息来判断浏览器的状态。
原理图如下:

2、Cookie的使用
1、创建对象
cookie是由服务端创建的,由浏览器端保存的。所以创建对象我们应该在服务端创建cookie
cookie的创建方法:

 创建一个CookieServlet
在Servlet的doPost()方法中编写如下代码:
//创建一个Cookie对象
Cookie cookie = new Cookie(“username”, “zhangsan”);
//将Cookie对象放入response对象中
response.addCookie(cookie);

 在浏览器中访问该Servlet,会发现响应头中出现如下内容:
Set-Cookie: username=zhangsan
如此就成功的向浏览器设置了一个Cookie,当我们在刷新页面时会发现浏览器的请求头中出现如下代码:
Cookie: username=zhangsan

 同样我们还可以同时设置多个Cookie:
//创建一个Cookie对象
Cookie cookie1 = new Cookie(“username”, “zhangsan”);
Cookie cookie2 = new Cookie(“password”, “123456”);
Cookie cookie3 = new Cookie(“age”, “20”);
//将Cookie对象放入response对象中
response.addCookie(cookie1);
response.addCookie(cookie2);
response.addCookie(cookie3);

浏览器会按以下形式发送Cookie:
Cookie: username=zhangsan; password=123456; age=20

 设置Cookie就是两个步骤:
1、创建Cookie对象
2、将Cookie对象加入到response中

2、设置cookie
1、cookie的有效时间
 经过上边的介绍我们已经知道Cookie是存储在浏览器中的,但是可想而知一般情况下浏览器不可能永远保存一个Cookie,一来是占用硬盘空间,再来一个Cookie可能只在某一时刻有用没必要长久保存。
 所以我们还需要为Cookie设置一个有效时间。
 通过Cookie对象的setMaxAge()可以设置Cookie的有效时间。
其中setMaxAge()接收一个int型的参数,来设置有效时间。参数主要有一下四种情况:
 设置为0,setMaxAge(0)
Cookie立即失效,下次浏览器发送请求将不会在携带该Cookie
 设置大于0,setMaxAge(60)
表示有效的秒数60就代表60秒即1分钟,也就是Cookie在1分钟后失效。
 设置小于0,setMaxAge(-1)
设置为负数表示当前会话有效。也就是关闭浏览器后Cookie失效
 不设置
如果不设置失效时间,则默认当前会话有效。
2、cookie的路径
 Cookie的路径指告诉浏览器访问那些地址时该携带该Cookie,我们知道浏览器会保存很多不同网站的Cookie,比如百度的Cookie,新浪的Cookie,腾讯的Cookie等等。那我们不可能访问百度的时候携带新浪的Cookie,也不可能访问每个网站时都带上所有的Cookie这是不现实的,所以往往我们还需要为Cookie设置一个Path属性,来告诉浏览器何时携带该Cookie。
 我们同过Cookie的setPath()来设置路径,这个路径是由浏览器来解析的所以/代表服务器的根目录。
如:
 设置为 /项目名/路径  cookie.setPath(“/项目名/路径”)
这样设置只有访问“/项目名/路径”下的的资源才会携带Cookie
如:/项目名/路径/1.jsp 、/项目名/路径/hello/2.jsp 等
 如果不设置,默认会在访问“/项目名”下的资源时携带
如:“/项目名/index.jsp” 、 “/项目名/hello/index.jsp”

Cookie cookie = new Cookie(“username”, “abc”);
cookie.setMaxAge(60*60*24);//秒为单位,一天后过期
cookie.setPath(getServletContext().getContextPath()+”/”);
resp.addCookie(cookie);
resp.sendRedirect(getServletContext().getContextPath()+”/index.jsp”);
3、读取cookie
通过以上步骤,我们将cookie保存到了浏览器端。那么我们如何读取cookie中的值呢。
分析:
cookie被设置进入浏览器后,每次请求都会携带cookie的值,所以我们需要从request中取出cookie进行解析。

//从request中获取所有cookie
Cookie[] cookies = request.getCookies();
//遍历cookie
for(Cookie c:cookies){
String cName = c.getName();//获取cookie名
String cValue = c.getValue();//获取cookie值
System.out.println(“cookie:” + cName + “=” +cValue);
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值