关于cookie的跨域名设置和读取

前提条件:

总共有三个域名,要本机调试时通过修改hosts文件映射至127.0.0.1
guokecheng.com
order.guokecheng.com
member.guokecheng.com

其他
localhost
127.0.0.1
192.168.11.192

总共设置了4个cookie
分别在上述域名中设置了3个cookie,名字分别为rootCookie,orderCookie,memberCookie
不指定域名属性设置了1个cookie,名字为commonCookie

 

setcookie.jsp

<%@ page session="false" pageEncoding="UTF-8" contentType="text/html; charset=UTF-8" %>
<%@ page import="javax.servlet.http.*" %>
<%
Cookie orderCookie=new Cookie("orderCookie", "orderCookie");
orderCookie.setDomain("order.guokecheng.com");

Cookie memberCookie=new Cookie("memberCookie", "memberCookie");
memberCookie.setDomain("member.guokecheng.com");

Cookie rootCookie=new Cookie("rootCookie", "rootCookie");
rootCookie.setDomain("guokecheng.com");

Cookie commonCookie=new Cookie("commonCookie", "commonCookie");

response.addCookie(orderCookie);
response.addCookie(memberCookie);
response.addCookie(rootCookie);
response.addCookie(commonCookie);
%>
<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8" />
        <title><%=request.getServletContext().getServerInfo() %></title>
        <link href="favicon.ico" rel="icon" type="image/x-icon" />
        <link href="favicon.ico" rel="shortcut icon" type="image/x-icon" />
        <link href="tomcat.css" rel="stylesheet" type="text/css" />
    </head>

    <body>
        设置cookie完成
    </body>
</html>

getcookie.jsp

<%@ page session="false" pageEncoding="UTF-8" contentType="text/html; charset=UTF-8" %>
<%@ page import="javax.servlet.http.*" %>

        
<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8" />
        <title><%=request.getServletContext().getServerInfo() %></title>
        <link href="favicon.ico" rel="icon" type="image/x-icon" />
        <link href="favicon.ico" rel="shortcut icon" type="image/x-icon" />
        <link href="tomcat.css" rel="stylesheet" type="text/css" />
    </head>
    <body>
        <%
        Cookie[] cookies = request.getCookies();
        if (cookies!=null) {
            for(Cookie c:cookies) {
                out.println(c.getName()+"\t"+c.getValue()+"<br/>");
            }    
        } else {
            out.println("cookies not foud....");
        }
        %>
    </body>
</html>

 

1.通过访问guokecheng.com进行cookie设置操作,http://guokecheng.com/setcookie.jsp
2.通过以下访问,cookie的可见性不一,如下

localhost 无任何cookie
127.0.0.1 无任何cookie
192.168.11.192 无任何cookie

guokecheng.com 可访问rootCookie,commonCookie //rootCookie本身就写在guokecheng.com,故可访问。commonCookie写入时无指定域名,默认为写cookie操作时接口(或页面)所在的域名。故在这里可见
order.guokecheng.com 可访问rootCookie //由于order.guokecheng.com是guokecheng的二级域名,故可读取到上一级域名设置的cookie(rootCookie)
member.guokecheng.com 可访问rootCookie ////由于member.guokecheng.com是guokecheng的二级域名,故可读取到上一级域名设置的cookie(rootCookie)


--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

1.通过访问order.guokecheng.com进行cookie设置操作,通过访问http://order.guokecheng.com/setcookie.jsp
2.通过以下访问,cookie的可见性不一,如下

localhost 无任何cookie
127.0.0.1 无任何cookie
192.168.11.192 无任何cookie

guokecheng.com 可访问rootCookie //rootCookie本身就写在guokecheng.com,故可访问。说明二级域名可往上一级域名写cookie时。commonCookie写入时无指定域名,默认为写cookie操作时接口(或页面)所在的域名。故在这里不可见
order.guokecheng.com 可访问rootCookie,commonCookie,orderCookie //由于order.guokecheng.com是guokecheng的二级域名,故可读取到上一级域名设置的cookie(rootCookie).
//commonCookie此次是通过order.guokecheng.com写的,默认即是这个域名,通过本域名访问,当然可访问到
//orderCookie同commonCookie,
member.guokecheng.com 可访问rootCookie //由于member.guokecheng.com是guokecheng的二级域名,故可读取到上一级域名设置的cookie(rootCookie)

 

--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
总结:
二级域名可以读取到在上一级域名下写的cookie
二级域名可以往上一级域名进行写cookie操作,反之不可

 

 

附:关于域名的校验,这里有一个验证函数。

 

posted on 2021-11-18 15:07  广州蝈蝈  阅读(798)  评论(0)    收藏  举报

导航