Cookie 简介
什么是cookie
Cookie(也称为复数Cookie)是服务器存储在您的浏览器上的数据片段。以键/值格式保存。每次发出请求时,请求标头都会自动包含该网站的该目录中的cookie 数据。网站经常使用此技术来识别用户是否登录以及用于其他功能。
简单地说,cookie 是服务器留在计算机用户浏览器上的一个小文件。
HTTP是无状态协议,服务器无法记录浏览器的访问状态。也就是说,服务器无法区分这两个请求是否是由同一个客户端发出的。这种类型的设计给网页程序设计带来了严重的问题。示例:当我在网上购物时,我买了裤子和手机。 http协议是无状态的,因此服务器不通过其他手段无法知道用户购买了什么。而cookies就是解决方案之一。 Cookie 实际上是服务器存储在您的浏览器中的一条信息。当浏览器收到cookie时,每次向服务器发出请求时,浏览器都会将此信息发送到服务器,以便服务器可以根据此信息处理请求。示例:在上面提到的在线商城中,当用户将商品添加到购物车时,服务器会将此信息封装在cookie 中并将其发送到浏览器。您的浏览器接收并存储cookie。内存(注意,这里的内存是本地内存,而不是服务器内存) 每当向服务器发送请求时,浏览器都会发送一个cookie,当用户可以确定他们购买了哪些产品时,服务器会读取并存储该cookie。当用户进行结账操作时,服务器可以根据cookie信息进行支付。 Cookie 的用途: 在线购物中心中的购物车保持用户登录Cookie 的缺点Cookie 作为请求或响应消息发送,这会大大增加网络流量。
Cookie 以明文形式发送,这降低了它们的安全性。
cookie 中存储的数据不稳定。用户可以随时清除cookie,并且cookie的使用有限制。
庐山真面目
Chrome cookie 位置:
C:\Users\lfy\AppData\Local\Google\Chrome\用户数据\Default\Cookies
Cookie 位置(即:C:\Users\lfy\AppData\Local\Microsoft\Windows\InetCache) 单击设置- 查看对象。
在Chrome 中显示cookie
Cookie如上图
从上图可以看出,cookie是键值对的形式,并且有一个过期时间(Max-Age,session表示在本次会话内有效)。
Cookie 原理
1) 一般来说,cookie就像一张“会员卡”,从服务器发送到浏览器,一旦服务器验证了这张“会员卡”,浏览器每次向浏览器发送请求时都会使用这张“会员卡”获取服务器。您的浏览器的身份可以被确定。其实这个所谓的“会员卡”就是服务器发送的一个响应头。
2) 如图所示,Set-Cookie响应头向服务器发送一张“会员卡”。该响应头的名称为JSESSIONID=95A92EC1D7CCB4ADFC24584CB316382E 和Path=/Test_cookie。服务器为该会员卡设置的一组键值对。当您的浏览器收到此信息时,会将其存储在内存或硬盘中。
3)当浏览器再次向服务器发送请求时,会发送以下cookie信息:
返回顶部
cookie 的使用
创建一个对象
Cookie 由服务器创建并由您的浏览器存储。因此,创建对象需要在服务器端创建cookie。创建cookie 的方法如下:
1)创建CookieServlet
在servlet 的doPost() 方法中编写以下代码。
//创建一个Cookie 对象。 Cookie cookie=new Cookie(‘username’, ‘zhangsan’); //将Cookie 对象放入响应对象中。 response.addCookie(cookie); 2) 在浏览器中访问servlet。响应头中出现以下内容:Set-Cookie: username=zhangsan
这样,一旦在浏览器中成功设置了cookie,当您刷新页面时,您将在浏览器的请求标头中看到以下代码。
Cookie: 用户名=张
3) 同样,您可以同时设置多个cookie。
//创建Cookie 对象Cookie cookie1=new Cookie(‘用户名’, ‘zhangsan’); Cookie Cookie2=new Cookie(‘密码’, ‘123456’);//将Cookie 对象放入响应对象中。 response.addCookie(cookie1);response.addCookie(cookie2);response.addCookie(cookie3);浏览器以以下格式发送cookie:
Cookie: 用户名=张;年龄=123456;
4) 设置cookie 分为两步: 创建cookie 对象。
将Cookie 对象添加到响应中。
设置cookie
Cookie有效期
1)经过上面的解释,我们已经知道cookie是存储在浏览器中的,但是一般情况下浏览器可能无法永远存储cookie。首先,cookie 会占用您的硬盘空间,其次,cookie 只能被存储。存放一段时间如果一直可用,则无需长期存放。
2)因此,您还必须设置cookie的有效期。
3) Cookie 的生存期可以通过Cookie 对象上的setMaxAge() 设置。
其中,setMaxAge()接收一个int类型参数并设置有效时间。参数主要有四种情况。
如果设置为0,setMaxAge(0) cookie 将立即禁用,浏览器下次发送请求时将不会发送cookie。
如果设置大于0,setMaxAge(60)表示有效的秒数。 60 表示60 秒或1 分钟。这意味着cookie 会在1 分钟后过期。
如果设置小于0,则setMaxAge(-1)设置为负数,表示当前会话有效。这意味着cookie 在您关闭浏览器时就会过期。
未设置如果未设置过期时间,则默认当前会话有效。
cookie路径
1)Cookie路径是指当您访问这些地址时向您的浏览器发送cookie。众所周知,浏览器会存储来自各种网站的cookie,包括百度cookie、新浪cookie 和腾讯cookie。这样的话,您访问百度时就不可能带上新浪的cookies了。当您访问每个网站时,也不可能携带所有cookie。因此,常常需要设置cookie的Path属性来告诉浏览器它的位置。随身携带这个饼干。
2) 使用cookie的setPath()设置路径。这个路径是由浏览器解析的,所以/代表服务器的根目录。
示例:/项目名称/路径如果设置为cookie.setPath(“/项目名称/路径”),则只有“/项目名称/路径”下的资源才会有cookie。
例如:/projectname/path/1.jsp、/projectname/path/hello/2.jsp等。
如果不设置,默认情况下访问“/项目名称”下的资源时会转发此信息,如“/项目名称/index.jsp”、“/项目名称/hello/index.jsp”等。
Cookie cookie=new Cookie(‘username’, ‘abc’);//以秒为单位,1天后过期cookie.setPath(getServletContext().getContextPath()+ ‘/’ ); resp.addCookie(cookie); resp.sendRedirect(getServletContext().getContextPath()+’/index.jsp’);
程序员除了写代码还能怎么挣工资?
读取cookie
上述步骤会将cookie 保存到您的浏览器中。那么我们如何读取cookie值呢?分析:
设置cookie并输入浏览器后,每个请求都包含cookie值,因此我们需要从请求中提取cookie进行分析。
//从requestCookie[]中获取所有cookie cookies=request.getCookies();//遍历cookiesfor(Cookie c:cookies){String cName=c.getName();//获取cookie名称String cValue=c.getValue(); /获取cookie值System.out.println(‘cookie:’ + cName + ‘=’ +cValue);}
原创文章,作者:小条,如若转载,请注明出处:https://www.sudun.com/ask/81671.html