Sharing cookie Across domain 跨域cookie访问 cookie跨域

本文介绍了一种跨域Cookie共享的技巧,通过在不同域名下的登录页面之间传递用户ID,并利用IFrame和P3P策略实现Cookie的跨域设置,以此达到用户在不同站点间免登录的目的。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Sharing cookie Across domain 跨域cookie访问 cookie跨域
今天研究一下cookie跨域的问题,主要有两种情况,
一种是允许跨子域访问,这种通过给Domain属性赋值的方法可以轻松实现。
另一种则是允许完全不相关的域可以访问同一个cookie。

这里主要介绍一下第二种的情况,
比如
http://www.blog.com/ 有 Login.aspx 页面
http://www.bbs.com/ 有 Login.aspx other.aspx页面
现在要求在用户在blog的登陆后,直接到bbs不要求再登陆了。

这里采用一取巧的方法,比较简单的实现这个功能,从另一种思路解决cookie跨域的问题,

先看一下blog的Login.aspx页面的代码
private   void  Login( string  userName,  string  password)
    {
        
bool  login;

        
if  (CheckLoginOKAndGetUserdID(userName, password))
        {
            login 
=   true ;
            Response.Write(
string .Format( " <IFRAME style='WIDTH:1px;HEIGHT:1px' src='http://www.bbs.com/Login.aspx?userId={0}' frameBorder='0'></IFRAME> " , userName));
        }
        
else
        {
            login 
=   false ;
        }
    }

当用户在blog登陆成功后,直接调用输出IFrame,并把userId作为URL的QueryString。
IFrame调用的Url就会执行bbs域的Login.aspx的Page_Load方法:

protected   void  Page_Load( object  sender, EventArgs e)
    {
        
string  userId;
        HttpContext.Current.Response.AddHeader(
" p3p " " CP=\ " IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT\ "" ); // 这句是关键,不能省掉
        userId  =  Request.QueryString[ " userId " ];
        HttpCookie oCookie 
=   new  HttpCookie( " UserID " );
        oCookie.Value 
=  userId;
        oCookie.Expires 
=  DateTime.Now.AddDays( 30 );
        HttpContext.Current.Response.Cookies.Add(oCookie);

        oCookie 
=   null ;
    }
在这里,它把需要的值(userId),从URL的QueryString获得了,然后再写到当前域(bbs)的cookie里。从而实现了cookie的跨域共享,其实只不是跨域拷贝。
执行完这个方法后bbs的Other.aspx页面就可以访问"UserID"这个cookie了,从而不需要重新登陆。

请注意HttpContext.Current.Response.AddHeader( " p3p " " CP=\ " IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT\ "" );
关键是这句。因为IE浏览器会把由IFrame应用程序写的cookie看成是第三方cookie,所以如果没有加这句,cookie会被当作第三方cookie而被删除.
php里是加 header('P3P:CP="IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT"');

我调试的代码在IE7下通过,其它浏览器并未测试。

转载于:https://www.cnblogs.com/webfpc/archive/2009/08/22/1552218.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值