【黑马程序员】Cookie的path设置以及默认取值说明
前端开发中的Cookie管理和使用方法

前端开发中的Cookie管理和使用方法在前端开发中,Cookie是一种常见的技术,用于在用户浏览器和服务器之间传递和存储有关用户的信息。
它在帮助开发者实现用户登录状态、保存用户偏好设置和跟踪用户行为等方面发挥着重要作用。
本文将介绍Cookie的管理和使用方法,以帮助前端开发者更好地应用该技术。
一、Cookie的概念和特点Cookie是一小段存储在用户浏览器中的文本信息,由服务器生成并发送给浏览器,浏览器将其保存并在每次请求同一服务器时附加在请求头中发送给服务器。
Cookie主要具有以下几个特点:1. Cookie的大小有限制:不同浏览器对Cookie大小的限制不同,一般为4KB左右。
2. Cookie的有效期:可以通过设置Cookie的过期时间来控制Cookie的有效期,如果未设置过期时间,则Cookie默认会话级别,即关闭浏览器后即失效。
3. Cookie的域和路径:可以通过设置Cookie的域和路径来限制Cookie的作用范围,仅对指定的域名和路径有效。
4. Cookie的安全性:Cookie中存储的信息是明文传输的,因此敏感信息不宜存储在Cookie中。
二、Cookie的创建和读取要在前端开发中使用Cookie,首先需要创建Cookie并将其发送给浏览器。
可以使用以下代码创建Cookie:```javascriptdocument.cookie = "key=value; expires=Sat, 31 Dec 2022 23:59:59 GMT; path=/";```该代码将创建一个名为"key",值为"value",过期时间为2022年12月31日23:59:59的Cookie,并将其保存在浏览器中。
要读取Cookie的值,可以使用以下代码:```javascriptvar cookieValue = document.cookie;```以上代码将返回一个字符串,包含所有已保存在浏览器中的Cookie。
set-cookie标准

set-cookie标准HTTP的Set-Cookie标头是用于在客户端存储会话数据的一种机制。
具体来说,Set-Cookie标头由服务器发送给浏览器,并将一个或多个cookie存储在浏览器中。
接下来,每次浏览器请求同一服务器时都会将这些cookie自动包含在请求中,从而让服务器能够识别和追踪用户会话。
一个标准的Set-Cookie头具有以下格式:Set-Cookie: name=value; 属性1=值1; 属性2=值2; ..."Set-Cookie"是标头名称,后面紧跟一个冒号和一个空格。
"name=value"指定了一个cookie的名称和它的值。
然后可以包含一系列的属性和值,用分号分隔。
常见的cookie属性包括:- Expires:指定cookie的过期日期。
它的值是一个特定的日期和时间,一旦超过这个日期,浏览器就会删除该cookie。
例如,Expires=Sat, 19 Oct 2024 08:00:00 GMT。
- Max-Age:与Expires属性类似,但是Max-Age指定的是cookie在多少秒后过期。
例如,Max-Age=3600表示cookie将在一小时后过期。
- Path:指定cookie的路径。
默认情况下,cookie只在设置它的页面及其子目录中可用。
例如,Path=/表示cookie对于整个域名都是可用的。
- Secure:指定cookie只能通过HTTPS连接发送。
当Secure属性存在并且为true时,浏览器只会通过安全连接发送cookie。
- HttpOnly:指定cookie只能通过HTTP或HTTPS连接发送,而无法通过JavaScript脚本访问。
这可以加强安全性,防止跨站脚本攻击。
例如,以下是一个设置了name为"session_id",值为"abcd1234"的cookie,并指定了过期日期、域名和路径的示例:当浏览器发送下一次请求时,会将该cookie自动包含在请求中GET /index.html HTTP/1.1Cookie: session_id=abcd1234服务器可以通过读取"Cookie"标头来访问和使用cookie的值。
cookie常见属性及用法

cookie常见属性及⽤法[导读]当设置为true时,表⽰创建的 Cookie 会被以安全的形式向服务器传输,也就是只能在 HTTPS 连接中被浏览器传递到服务器端进⾏会话验证,如果是 HTTP 连接则不会传递该信息,所以不会被窃取到Cookie 的具体内容。
⼀、Cookie常⽤属性⼀个Cookie包含以下信息:1)Cookie名称,Cookie名称必须使⽤只能⽤在URL中的字符,⼀般⽤字母及数字,不能包含特殊字符,如有特殊字符想要转码。
如js操作cookie的时候可以使⽤escape()对名称转码。
2)Cookie值,Cookie值同理Cookie的名称,可以进⾏转码和加密。
3)Expires,过期⽇期,⼀个GMT格式的时间,当过了这个⽇期之后,浏览器就会将这个Cookie删除掉,当不设置这个的时候,Cookie在浏览器关闭后消失。
4)Path,⼀个路径,在这个路径下⾯的页⾯才可以访问该Cookie,⼀般设为“/”,以表⽰同⼀个站点的所有页⾯都可以访问这个Cookie。
5)Domain,⼦域,指定在该⼦域下才可以访问Cookie,例如要让Cookie在下可以访问,但在下不能访问,则可将domain设置成。
6)Secure,安全性,指定Cookie是否只能通过https协议访问,⼀般的Cookie使⽤HTTP协议既可访问,如果设置了Secure(没有值),则只有当使⽤https协议连接时cookie才可以被页⾯访问。
7)HttpOnly,如果在Cookie中设置了"HttpOnly"属性,那么通过程序(JS脚本、Applet等)将⽆法读取到Cookie信息。
注意:上图为在w3shool上为setcookie语法,并没有显⽰7 httponly哦,各⾃版本⽀持问题。
⼀、属性说明:1 secure属性当设置为true时,表⽰创建的 Cookie 会被以安全的形式向服务器传输,也就是只能在 HTTPS 连接中被浏览器传递到服务器端进⾏会话验证,如果是 HTTP 连接则不会传递该信息,所以不会被窃取到Cookie 的具体内容。
Cookie的路径和域

Cookie的路径和域1.Cookie路径介绍我们知道Cookie的属性有很多,其中有一个属性是路径。
有些人认为Cookie的路径指的是Cookie在客户端的保存路径,其实并不是。
Cookie的路径是在服务器创建Cookie时设置的,它的作用是决定浏览器访问服务器的某个资源时,需要将浏览器端保存的那些Cookie归还给服务器。
如图1-1所示:图1-1cookie路径图1-1中,浏览器端保存的Cookie有三个,分别是Cookie1、Cookie2和Cookie3。
它们三个的访问路径分别为:“/Example/cookie“、”/Example/“、”Example1/cookie“。
浏览器访问服务器端的路径为:”http://localhost:8080/Example/cookie/a/index.jsp“。
也就是说index.jsp页面的访问路径为:”/Example/cookie/a/“,该路径包含了Cookie1和Cookie2的路径,因此在访问index.jsp时,浏览器会将Cookie1和Cookie2发送给服务器。
这就是Cookie的路径的作用,其中涉及到访问路径。
如果服务器创建Cookie时没有设置路径,那么该Cookie的路径是当前资源的访问路径。
例如:在index.jsp页面中创建了一个Cookie,index.jsp页面的访问路径为“/Example/“,那么该Cookie的路径就是”/Example/“。
如果服务器创建Cookie时设置了路径,那么Cookie的路径就是设置的路径,例如:cookie.setPath(“/Example/cookie”),那么该Cookie的路径就是”/Example/cookie“。
2.Cookie路径练习通过上面对Cookie路径的介绍,我们对它有了一定的了解,现在通过一个案例来验证以上结论。
具体步骤如下:(1)创建一个web应用,Example20,在该应用下的WebRoot目录下新建一个目录cookie,并在该目录下新建一个jsp文件,名称为one.jsp,主要代码如例1-1所示:例1-1one.jsp<body><%Cookie cookie=new Cookie("one","hello");response.addCookie(cookie);%></body>例1-1中,服务器创建cookie但是并没有设置其路径,那么该cookie的路径应为one.jsp的访问路径。
cookie标准

Cookie是一种HTTP协议的客户端存储机制,用于在用户的计算机上存储和检索数据。
Cookie标准是由W3C(World Wide Web Consortium)维护的一组规范,定义了如何在Web应用程序中使用Cookie。
以下是一些关于Cookie标准的要点:1.Cookie是由服务器发送到用户的浏览器并存储在用户的计算机上的。
Cookie可以包含关于用户浏览习惯、用户身份验证和个性化设置等信息。
2.Cookie标准规定了Cookie的语法、内容和存储机制。
一个Cookie由名称、值和一组属性组成。
属性包括有效期、路径、域和安全标志等。
3.浏览器可以设置最大存储的Cookie数量和每个Cookie的最大大小。
默认情况下,浏览器会删除过期的Cookie,但也可以手动删除。
4.Cookie可以设置为会话Cookie(session cookie)或持久性Cookie(persistent cookie)。
会话Cookie在浏览器关闭后被删除,而持久性Cookie在指定的有效期结束后被删除。
5.Cookie标准还规定了如何使用HTTP响应头Set-Cookie来发送一个Cookie到浏览器。
HTTP响应头Set-Cookie包含cookie的名称、值和属性。
6.为了保护用户隐私,Cookie标准还规定了使用SameSite属性。
SameSite属性可以设置为Strict、Lax和None。
当设置为Strict时,Cookie只能在同一站点的上下文中使用,以防止跨站点跟踪。
7.为了增强安全性,Cookie标准还引入了HttpOnly属性。
当HttpOnly属性设置为true时,JavaScript无法访问Cookie,这有助于防止跨站脚本攻击(XSS)。
总之,Cookie标准定义了如何在Web应用程序中使用Cookie来存储和检索数据,并规定了如何保护用户隐私和增强安全性。
cookie的使用流程

Cookie的使用流程什么是CookieCookie是存储在用户计算机上的小文本文件,用于在客户端和服务器之间传递数据。
通过使用Cookie,服务器可以向客户端发送数据,并且客户端会在后续的请求中将这些数据回传给服务器。
Cookie的使用流程1.创建Cookie–服务器在响应中通过Set-Cookie头部字段将Cookie信息发送给客户端。
–Set-Cookie头部字段中包含了Cookie的名称、值以及其他可选属性,如过期时间、路径等。
2.发送Cookie–客户端在后续的请求中会自动将Cookie信息包含在请求头部的Cookie字段中。
–Cookie字段中包含了所有在服务器端设置的可用的Cookie的名称和值。
3.服务器接收Cookie–服务器在接收到客户端的请求后,会解析Cookie字段,并将相应的Cookie信息提取出来使用。
4.处理Cookie–服务器可以在处理请求时根据Cookie的值来执行一些操作,比如识别用户、存储用户偏好等。
–服务器可以使用服务器端编程语言(如PHP、Node.js等)来处理Cookie。
5.更新Cookie–服务器可以在响应中更新Cookie的值或属性,比如修改过期时间、更改值等。
–服务器在响应中使用Set-Cookie头部字段来更新Cookie。
6.删除Cookie–服务器可以通过设置Cookie的过期时间为一个过去的时间来删除Cookie。
–前端页面也可以通过JavaScript删除Cookie。
Cookie的常见属性在Set-Cookie头部字段中,可以指定一些可选的属性来控制Cookie的行为。
以下是几个常见的属性:•Domain属性:用于设置Cookie的域名。
默认情况下,Cookie只能在设置它的域和子域中使用。
•Path属性:用于设置Cookie的路径。
默认情况下,Cookie只能在设置它的页面所在的路径及其子路径中使用。
•Expires属性:用于设置Cookie的过期时间。
Cookie详解

Cookie详解Cookie我们知道http协议是⽆状态的,也就是说就算客户端是第⼆次访问服务器,服务器还是把此次访当做⼀个新的访问进⾏处理,因为服务端并不知道客户端之前是否访问过。
⽽cookie和session则就是为了弥补这⼀缺陷出现的⼀种机制。
介绍服务端给客户端的数据,存储于客户端(浏览器)。
由于是保存在客户端上的,所以存在安全问题,并且cookie是由个数和⼤⼩限制的(4KB),所以⼀般cookie⽤来存储⼀些⽐较⼩且安全性要求不⾼的数据,⽽且⼀般数据都会进⾏加密。
我们平时在登录某些⽹站时,关闭浏览器后再次打开登录,⽤户名密码等数据会⾃动填充在表单。
或者我们浏览淘宝的某个商品后,下次再打开发现出现的商品很多都是我们之前浏览的同类商品等。
这些都是cookie的应⽤场景。
常⽤⽅法://创建Cookie cookie = new Cookie("account", account);//创建⼀个cookie,保存账号数据//有效时长cookie.setMaxAge(1*60*60*24);//cookie存在在本地的有效时长(单位为秒)默认为-1 表⽰页⾯关闭cookie就失效//⽣效域名cookie.setDomain("");//设置在某个域名下⽣效//⽣效路径cookie.setPath("/login.jsp");//设置访问该域名下某个路径时⽣效//添加到responseresponse.addCookie(cookie);//添加到response//获取cookieCookie[] cookies=request.getCookies();//获取cookiesfor(Cookie cookie : cookies){cookie.getName();//cookie的namecookie.getValue();//cookie的value}//删除cookiecookie.setMaxAge(0); //或者-1response.addCookie(cookie);Cookie的属性:name:必须的value:必须的comment:可选的。
黑马程序员WEB11-Cookie和Session篇笔记

第11章WEB11-Cookie&Session篇1.1案例一:记录用户的上次登陆访问时间.1.1.1需求:用户登录完成后,显示您是第x位访问的用户,您的上次访问时间是:yyyy-MM-dd.* 如果第一次访问的话,只显示您是第x位用户.* 如果不是第一次访问的话,显示您是第x位访问的用户,您的上次访问时间是:yyyy-MM-dd.1.1.2分析:1.1.2.1技术分析:【会话技术】什么是会话:用户打开一个浏览器访问页面,访问网站的很多页面,访问完成后将浏览器关闭的过程称为是一次会话.常见的会话技术:* Cookie :将数据保存到客户端浏览器.* Session :将数据保存到服务器端.为什么使用会话技术?* 私有的数据,购物信息数据保存在会话技术中.参见图一和图二使用会话技术:【Cookie技术的使用】向浏览器保存数据:HttpServletResponse有一个方法:* void addCookie(Cookie cookie);获得浏览器带过来的Cookie:HttpServletRequest有一个方法:* Cookie[] getCookies();创建一个Cookie对象:* Cookie(String name,String value);【JSP的简单概述】什么是JSP :Java Server Pages(Java服务器端页面).JSP = Java代码 + HTML的元素 + JSP 内置东西SUN公司为什么推出JSP动态网页开发技术:* SUN公司推出的Servlet技术进行动态网页开发.发现Servlet自身有不足没有办法与ASP,PHP技术竞争.想在动态网页中输出表单.在Servlet中获得PrintWriter out = response.getWriter();* out.println(“<form action=’’ method=’’>”);* out.println(“</form>”);* SUN又推出了动态的网页开发技术就是JSP.JSP的执行过程:* JSP会被翻译成Servlet,编译成class进行执行的.JSP的嵌入Java代码:JSP的脚本元素* <%! %> :翻译成类中的成员部分. 定义变量,定义方法,定义类.Servlet是线程不安全的,尽量少在类中定义成员属性!!* <% %> :翻译成类的service方法内部的内容. 定义变量,定义类,直接写代码块.* <%= %> :翻译成service方法内部的out.print();1.1.2.2步骤分析:【步骤一】:准备登陆的案例.【步骤二】:在统计人数的Servlet中.判断是否是第一次访问.【步骤三】:根据是否是第一次显示不同的信息,同时将当前的时候保存到Cookie中.1.1.3代码实现public class CountServlet extends HttpServlet {private static final long serialVersionUID = 1L;protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {response.setContentType("text/html;charset=UTF-8");Integer count = (Integer) this.getServletContext().getAttribute("count");// response.getWriter().println("<h1>现在网站被访问的次数为:"+count+"</h1>");/*** 获得浏览器中带过来的所有的Cookie信息,从数组中查找有没有指定名称的Cookie* 判断用户是否是第一次访问:(从数组中没有找到指定名称的Cookie)* * 如果是第一次:显示欢迎,记录当前访问的时间存入到Cookie中.* * 如果不是第一次:显示欢迎,上一次访问时间,同时记录当前访问的时间存入到Cookie中。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
【黑马程序员】Cookie 的path 设置以及默认取值说明在JaveEE 课程中,我们Cookie 的API 学习主要集中在name 、value 、maxAge 的使用,针对path 的讲解比较少,下面,将对Cookie 中的path 进行简单的阐述。
setPath 的API 说明public void setPath(String uri)指定客户端应该返回 cookie 的路径。
cookie 对于指定目录中的所有页面及该目录子目录中的所有页面都是可见的。
cookie 的路径必须包括设置 cookie 的 servlet ,例如 /catalog ,它使 cookie 对于服务器上 /catalog 下的所有目录都是可见的举例如下:01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 <!-- 准备三个servlet 。
CookiePath1是设置path 的值CookiePath2是获取path 的值CookiePath3是获取path 的值--><servlet ><servlet-name >CookiePath1</servlet-name ><servlet-class >com.itheima.cookie.CookiePath1</servlet-class ></servlet ><servlet-mapping ><servlet-name >CookiePath1</servlet-name ><url-pattern >/path1</url-pattern ></servlet-mapping ><servlet ><servlet-name >CookiePath2</servlet-name ><servlet-class >com.itheima.cookie.CookiePath2</servlet-class ></servlet ><servlet-mapping ><servlet-name >CookiePath2</servlet-name ><url-pattern >/path2</url-pattern ></servlet-mapping >22 23 24 25 26 27 28 29 <servlet ><servlet-name >CookiePath3</servlet-name ><servlet-class >com.itheima.cookie.CookiePath3</servlet-class ></servlet ><servlet-mapping ><servlet-name >CookiePath3</servlet-name ><url-pattern >/path3</url-pattern ></servlet-mapping >01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 /*** CookiePath1作用:new 一个cookie 并回写到浏览器* 使用最简单的servlet 设置cookie 的path 为/urlPattern/path2*/public class CookiePath1 extends HttpServlet {private static final long serialVersionUID = 1L;protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {Cookie cookie = new Cookie("demo1", "value1");//设置path 为"/urlPattern"cookie.setPath("/urlPattern/path2");//将cookie 回写到 浏览器response.addCookie(cookie);response.getWriter().write("cookie return OK");}protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doGet(request, response);}}通过访问path1(http://localhost:8080/urlPattern/path1),将cookie 回写到浏览器,响应如下:01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 /*** url-pattern 为 /path2* 获取cookie 值*/public class CookiePath2 extends HttpServlet {private static final long serialVersionUID = 1L;protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//根据cookie 名称获取cookieCookie cookie =CookieUtil.getNamedCookie(request.getCookies(),"demo1");if (cookie != null ){String value = cookie.getValue();System.out.println("得到cookie(demo1)的值是:" + value); }}protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doGet(request, response);}}访问path2路径(localhost:8080/urlPattern/path2),尝试获取cookie 信息。
控制台输出如下:01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 /*** url-pattern 为 /path3* 获取cookie 值*/public class CookiePath3 extends HttpServlet {private static final long serialVersionUID = 1L;protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//根据cookie 名称获取cookieCookie cookie =CookieUtil.getNamedCookie(request.getCookies(),"demo1");if (cookie != null ){String value = cookie.getValue();System.out.println("得到cookie(demo1)的值是:" + value); }}protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doGet(request, response);}}访问path3路径(localhost:8080/urlPattern/path3),尝试获取cookie 信息。
控制台无打印。
说明,path3无法获取到名称为demo1的cookie 值。
回到API 中的说明,只有符合该cookie 设置的path 或者子目录,才可以访问。
我们将path3的url-pattern 拦截路径更改成1 <url-pattern >/path2/path3</url-pattern > 之后,在进行path3访问(localhost:8080/url-pattern/path2/path3),控制台可以打印cookie 数据,并且在请求中也可以看到该cookie path 的默认取值规则:当new 一个Cookie 回写到浏览器,但是并且没有设置path 时,有如下的path 默认值。
(1) 当URI 的path 值是以“/”结尾的时候,直接设置为cookie 的path 值(2) 当URI 的path 值不是以“/”结尾的时候,查看path 里面是否有“/”如果有“/”的话,直接截取到最后一个“/”,然后设置为cookie 的path 值。
举例说明: 1 2 3 4 Cookie cookie = new Cookie("demo1","value1");//将cookie 回写到 浏览器response.addCookie(cookie);response.getWriter().write("cookie return OK");那么,响应的cookie 截图如下:如果没有“/”的话,将cookie 的path 设置为”/”。