JAVA培训之Cookie的路径和域

1.Cookie路径介绍

我们知道Cookie的属性有很多,其中有一个属性是路径。有些人认为Cookie的路径指的是Cookie在客户端的保存路径,其实并不是。
Cookie的路径是在服务器创建Cookie时设置的,它的作用是决定浏览器访问服务器的某个资源时,需要将浏览器端保存的那些Cookie归还给服务器。如图1-1所示:
JAVA培训之Cookie的路径和域
图1-1 cookie路径
图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-1 one.jsp
<body>
 <%
   Cookie cookie=new Cookie("one","hello");
   response.addCookie(cookie);
  %>
</body>
例1-1中,服务器创建cookie但是并没有设置其路径,那么该cookie的路径应为one.jsp的访问路径。
(2)将Example20发布到服务器,然后启动服务器,在谷歌浏览器端地址栏上输入:http://localhost:8080/Example20/cookie/one.jsp,然后查看cookie信息,如图1-2所示:
JAVA培训之Cookie的路径和域
图1-2 cookie信息
由图1-2可知,cookie的路径是:“/Example20/cookie“,该路径正是one.jsp页面的访问路径。
(3)在WebRoot目录下的cookie目录中新建一个jsp文件,名称为two.jsp,主要代码如例1-2所示:
例1-2 two.jsp
<body>
 <%
  Cookie[] cookies=request.getCookies();
  if(cookies!=null){
  for(Cookie c:cookies){
    out.print(c.getName()+"="+c.getValue()+"<br>");
  }
  }
  %>
</body>
(4)重新启动服务器,在浏览器端地址栏上输入:http://localhost:8080/Example20/cookie/two.jsp,并使用浏览器的开发者工具,查看请求信息中的cookie,如图1-3所示:
JAVA培训之Cookie的路径和域
图1-3 请求信息
由图1-3可知,在访问two.jsp页面时,浏览器将名称为one和JSESSIONID的cookie归还给服务器。因为two.jsp页面的访问路径也是“/Example20/cookie”。JSESSIONID能够发送过来是因为它的路径是“/Example20/”,也包含在访问路径中,因此被浏览器发送过来。
(5)在浏览器端访问Example20工程的index.jsp页面,访问路径为:http://localhost:8080/Example20,使用开发者工具查看请求信息,观察名称为one的cookie是否在请求信息中,如图1-4所示:
JAVA培训之Cookie的路径和域
图1-4 请求信息
由图1-4可知,访问index.jsp页面时,浏览器只将名称为JSESSIONID的cookie发送给服务器,而名称为one的cookie并没有发送服务器,原因是index.jsp页面的访问路径是“/Example20/”,而one的访问路径是“/Example20/cookie”,index.jsp页面的访问路径并不包含one的路径。
需要注意的是,大家不要将包含的关系弄混淆了,是访问路径包含cookie的路径。例如,浏览器中保存如下几个cookie,它们的路径分别是:
aCookie.path=/Example20/;bCookie.path=/Example20/jsps/;cCookie.path=/Example20/jsps/cookie

  • 访问路径是:http://localhost:8080/Example20/index.jsp

浏览器发送给服务器的cookie有:aCookie;

  • 访问路径是:http://localhost:8080/Example20/jsps/a.jsp

浏览器发送给服务器的cookie有:aCookie,bCookie;

  • 访问路径是:http://localhost:8080/Example20/jsps/cookie/b.jsp

浏览器发送给服务器的cookie有:aCookie,bCookie,cCookie。

3.Cookie的域

Cookie还有一个属性就是域,Cookie类中有设置和获取cookie域的方法,如下所示:

  • Void setDomain(String pattern):设置cookie的域;
  • String getDomain():获取cookie的域,返回值的类型是String类型。

其中Domain单词就有域名的意思。一般我们很少使用cookie的域,只有在多个二级域共享Cookie时才用。例如:www.baidu.com、zhidao.baidu.com、news.baidu.com、tieba.baidu.com这些域可以理解是百度的子项目,现在要在这些域中共享cookie,就需要使用cookie的域,使用时需要注意以下两点:

  • 设置domain为:setDomain(".baidu.com”);
  • 设置path为:setPath(“/”)。

我们如果要自己设置Cookie的域,需要在电脑上配置虚拟主机,下面大家按照以下的步骤操作,如下:
(1) 在C:/WINDOWS/system32/drivers/etc/hosts文件中添加如下内容:
127.0.0.1       news.qdmmy6.com
127.0.0.1       tieba.qdmmy6.com
这两个域名后面两个单词要一致,如:qdmmy6.com。
(2) 在Tomcat的安装目录下的/conf/server.xml文件中添加如下配置:
<Host name="news.qdmmy6.com"  appBase="news"
            unpackWARs="true" autoDeploy="true">
<Value className="org.apache.catalina.valves.AccessLogValve" directory="logs"
               prefix="localhost_access_log." suffix=".txt"
               pattern="%h %l %u %t &quot;%r&quot; %s %b" />
      </Host>
 <Host name="tieba.qdmmy6.com"  appBase="tieba"
            unpackWARs="true" autoDeploy="true">
<Value className="org.apache.catalina.valves.AccessLogValve" directory="logs"
               prefix="localhost_access_log." suffix=".txt"
               pattern="%h %l %u %t &quot;%r&quot; %s %b" />
      </Host>
(3)点击此处下载 JAVA培训之Cookie的路径和域资源,将它们解压后拷贝到Tomcat的安装目录下。
(4)启动Tomcat服务器,在浏览器端访问:http://news.qdmmy6.com/SaveServlet.使用HttpWatch或者其他开发者工具查看请求响应信息,观察cookie的信息。
(5)在浏览器端访问:http://tieba.qdmmy6.com/GetServle,使用HttpWatch或者其他开发者工具查看请求响应信息,观察cookie的信息。





原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/253176.html

(0)
上一篇 2022年5月7日
下一篇 2022年5月7日

相关推荐

发表回复

登录后才能评论