全国咨询/投诉热线:400-618-4000

JAVA培训之Cookie的路径和域

更新时间:2016年08月17日16时33分 来源:传智播客JAVA培训学院 浏览次数:

1.Cookie路径介绍

我们知道Cookie的属性有很多,其中有一个属性是路径。有些人认为Cookie的路径指的是Cookie在客户端的保存路径,其实并不是。
Cookie的路径是在服务器创建Cookie时设置的,它的作用是决定浏览器访问服务器的某个资源时,需要将浏览器端保存的那些Cookie归还给服务器。如图1-1所示:

图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所示:

图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所示:

图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所示:

图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)点击此处下载 资源,将它们解压后拷贝到Tomcat的安装目录下。
(4)启动Tomcat服务器,在浏览器端访问:http://news.qdmmy6.com/SaveServlet.使用HttpWatch或者其他开发者工具查看请求响应信息,观察cookie的信息。
(5)在浏览器端访问:http://tieba.qdmmy6.com/GetServle,使用HttpWatch或者其他开发者工具查看请求响应信息,观察cookie的信息。

本文版权归传智播客Java培训学院所有,欢迎转载,转载请注明作者出处。谢谢!
作者:传智播客Java培训学院
首发:http://www.itcast.cn/javaee

javaee

python

web

ui

cloud

test

c

netmarket

pm

Linux

movies

robot

uids

北京校区

    14天免费试学

    基础班入门课程限时免费

    申请试学名额

    15天免费试学

    基础班入门课程限时免费

    申请试学名额

    15天免费试学

    基础班入门课程限时免费

    申请试学名额

    15天免费试学

    基础班入门课程限时免费

    申请试学名额

    20天免费试学

    基础班入门课程限时免费

    申请试学名额

    8天免费试学

    基础班入门课程限时免费

    申请试学名额

    20天免费试学

    基础班入门课程限时免费

    申请试学名额

    5天免费试学

    基础班入门课程限时免费

    申请试学名额

    0天免费试学

    基础班入门课程限时免费

    申请试学名额

    12天免费试学

    基础班入门课程限时免费

    申请试学名额

    5天免费试学

    基础班入门课程限时免费

    申请试学名额

    5天免费试学

    基础班入门课程限时免费

    申请试学名额

    10天免费试学

    基础班入门课程限时免费

    申请试学名额