跨二级域名
  我们知道cookie是可以跨二级域名来访问,这个很好理解,例如你  在的web应用程序创建了一个cookie,要想在bbs.test1.com这样的二级域名对应的应用程序中访问,就必须你在创建cookie的时候设置domain参数domain=test1.com。 以asp.net为例 代码如下:
复制代码 代码如下:
HttpCookie cookie = new HttpCookie("name", "www.Admin10000.com"); 
cookie.Domain = "test1.com"; 
cookie.Path = "https://www.jb51.net/"; 
Response.Cookies.Add(cookie); 
跨顶级域名
如果我不是二级域名而是完全在不同顶级域名中,例如 所在的web应用程序创建了一个cookie,想要在 或其二级域名的应用程序中访问,改怎么办呢?我们知道靠常规反的方法是访问不了的,关键我们就是看看有没有方法可以访问。事实是Cookie可以在一定条件下跨域,而不是随心所欲的实现跨域。
我们来做个测试,看看两个站点 和 如何实现cookie跨域访问。 按照常规我们需要有2个顶级域名,并且有DNS服务器才能够配置域名,否则我们是无法验证的,但是这里我们也没有必要那么麻烦,我们可以通过修改hosts文件来模拟。在 c:\windows\system32\drivers\etc 中有 hosts文件,在末尾添加上
127.0.0.1    
127.0.0.1     
两行,就可以将本机用上面的域名访问本机回环地址了。我们只需要在IIS上部署一套程序,ip为本机回环地址,用两个域名分别访问就可以了。
我们新建三个页面,分别是 Default.aspx、SSO.ashx、GetCookie.aspx。
其中Default.aspx是 的页面,访问的地址是 。看一下前台代码,它没有任何后台代码
复制代码 代码如下:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="Admin10000.Web.Default" %> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head runat="server"> 
    <title></title> 
</head> 
<body> 
    <form runat="server"> 
    <div> 
        <script type="text/javascript"> 
            var _frm = document.createElement("iframe"); 
            _frm.style.display = "none"; 
            _frm.src = "https://www.test2.com/SSO.ashx"; 
            document.body.appendChild(_frm);    
        </script> 
    </div> 
    </form> 
</body> 
</html> 
另外一个是 SSO.ashx 页面,我们认为它是 的页面,前台没有任何代码,后台代码如下:
复制代码 代码如下:
using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.Services; 
using System.Web.SessionState; 
namespace Admin10000.Web 
{ 
    /// <summary> 
    /// $codebehindclassname$ 的摘要说明 
    /// </summary> 
    [WebService(Namespace = "http://tempuri.org/")] 
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] 
    public class SSO : IHttpHandler 
    { 
        public void ProcessRequest(HttpContext context) 
        { 
            HttpCookie cookie = new HttpCookie("name", "www.Admin10000.com"); 
            cookie.Domain = "test2.com"; 
            cookie.Path = "https://www.jb51.net/"; 
            cookie.Expires = DateTime.Now.AddMinutes(10000); 
            context.Response.Cookies.Add(cookie); 
            context.Response.ContentType = "text/plain"; 
            context.Response.AddHeader("P3P", "CP=CAO PSA OUR"); 
            context.Response.Write(""); 
        } 
        public bool IsReusable 
        { 
            get
            { 
                return false; 
            } 
        } 
    } 
} 
最后是 GetCookie.aspx 页面,它同样是下的页面,没有前台代码,只有后台代码:
复制代码 代码如下:
