cookie ,cookieo

cookie 简介什么是 cookiecookie,有时我们也用其复数形式 cookies,是服务端保存在浏览器端的数据片段。以 key/value的形式进行保

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

5c9a16af4e844cfe8ed3eb2998bd3b94~noop.image?_iz=58558&from=article.pc_detail&lk3s=953192f4&x-expires=1717735444&x-signature=IP97pAk%2FaIc4eNJ%2F5%2F5OzCm%2BhIk%3D

Cookie如上图

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

Cookie 原理

1) 一般来说,cookie就像一张“会员卡”,从服务器发送到浏览器,一旦服务器验证了这张“会员卡”,浏览器每次向浏览器发送请求时都会使用这张“会员卡”获取服务器。您的浏览器的身份可以被确定。其实这个所谓的“会员卡”就是服务器发送的一个响应头。

edb844fe3af944c891087f95b0dba249~noop.image?_iz=58558&from=article.pc_detail&lk3s=953192f4&x-expires=1717735444&x-signature=8nS%2ByUAwc%2FxPthVfT3%2F5Cy8AwyE%3D

2) 如图所示,Set-Cookie响应头向服务器发送一张“会员卡”。该响应头的名称为JSESSIONID=95A92EC1D7CCB4ADFC24584CB316382E 和Path=/Test_cookie。服务器为该会员卡设置的一组键值对。当您的浏览器收到此信息时,会将其存储在内存或硬盘中。

3)当浏览器再次向服务器发送请求时,会发送以下cookie信息:

54e7d4bcc3094e04aa53701153477855~noop.image?_iz=58558&from=article.pc_detail&lk3s=953192f4&x-expires=1717735444&x-signature=JwtGhs81iKuZ8pqdFevfWCUyqVA%3D

9f0a0d6364ae45188a5e8a3496057df1~noop.image?_iz=58558&from=article.pc_detail&lk3s=953192f4&x-expires=1717735444&x-signature=ZRSqolhZVDFoVwn14UWz8nbDF3Y%3D

返回顶部

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

(0)
小条's avatar小条
上一篇 2024年5月31日 下午12:43
下一篇 2024年5月31日 下午12:44

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注