惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

T
Threatpost
IT之家
IT之家
Hugging Face - Blog
Hugging Face - Blog
Engineering at Meta
Engineering at Meta
爱范儿
爱范儿
博客园 - Franky
博客园 - 【当耐特】
MyScale Blog
MyScale Blog
雷峰网
雷峰网
月光博客
月光博客
云风的 BLOG
云风的 BLOG
博客园 - 司徒正美
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
P
Proofpoint News Feed
The GitHub Blog
The GitHub Blog
N
Netflix TechBlog - Medium
WordPress大学
WordPress大学
罗磊的独立博客
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
H
Hackread – Cybersecurity News, Data Breaches, AI and More
Y
Y Combinator Blog
Know Your Adversary
Know Your Adversary
宝玉的分享
宝玉的分享
L
Lohrmann on Cybersecurity
S
SegmentFault 最新的问题
L
LangChain Blog
K
Kaspersky official blog
P
Palo Alto Networks Blog
P
Privacy & Cybersecurity Law Blog
美团技术团队
Scott Helme
Scott Helme
B
Blog RSS Feed
T
Threat Research - Cisco Blogs
博客园_首页
L
LINUX DO - 热门话题
腾讯CDC
C
CERT Recently Published Vulnerability Notes
A
About on SuperTechFans
博客园 - 三生石上(FineUI控件)
J
Java Code Geeks
V
V2EX
Martin Fowler
Martin Fowler
T
The Exploit Database - CXSecurity.com
人人都是产品经理
人人都是产品经理
MongoDB | Blog
MongoDB | Blog
Latest news
Latest news
S
Schneier on Security
AWS News Blog
AWS News Blog

博客园 - leegool

常见XSD问题 EntitySpace 常用语句 抗投诉空间 C#用WebClient下载File时操作超时的问题 用C# 实现 Zen Cart 的用户密码加密算法 ASP.NET MVC 3 新特性 ASP.NET MVC 局部缓存实现 用户控件缓存 Partial Output Caching - leegool System.Web.Security.SqlMembershipProvider”要求一个与架构版本“1”兼容的数据库架构。 关于MarshalByRefObject的解释 MVC upload image MVC上传图片的例子 - leegool jQuery Custom Selector JQuery自定义选择器 - leegool 清楚浏览器缓存 Overview of Full Text Stop Words(MSSQL全文索引的干扰词概括)MSSQL 全文索引的最小单词长度 JQuery性能优化 MS SQL 事务隔离级别 认识ASP.NET 中的 AppDomain 国外服务器上 中文成 显示乱码 web性能优化(最佳) EntitySpaces 2009 Trial Expire 异常
Sharing cookie Across domain 跨域cookie访问 cookie跨域
leegool · 2009-08-22 · via 博客园 - leegool

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下通过,其它浏览器并未测试。