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

推荐订阅源

Latest news
Latest news
T
Troy Hunt's Blog
V
Vulnerabilities – Threatpost
L
LINUX DO - 热门话题
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
Simon Willison's Weblog
Simon Willison's Weblog
V
V2EX
博客园 - 司徒正美
B
Blog RSS Feed
AWS News Blog
AWS News Blog
MyScale Blog
MyScale Blog
Scott Helme
Scott Helme
Cisco Talos Blog
Cisco Talos Blog
Last Week in AI
Last Week in AI
NISL@THU
NISL@THU
博客园 - Franky
P
Proofpoint News Feed
博客园_首页
C
CERT Recently Published Vulnerability Notes
雷峰网
雷峰网
S
Schneier on Security
P
Proofpoint News Feed
Hugging Face - Blog
Hugging Face - Blog
G
GRAHAM CLULEY
博客园 - 三生石上(FineUI控件)
月光博客
月光博客
WordPress大学
WordPress大学
The Hacker News
The Hacker News
T
Threatpost
阮一峰的网络日志
阮一峰的网络日志
A
Arctic Wolf
Microsoft Azure Blog
Microsoft Azure Blog
T
The Exploit Database - CXSecurity.com
Engineering at Meta
Engineering at Meta
罗磊的独立博客
T
The Blog of Author Tim Ferriss
D
Darknet – Hacking Tools, Hacker News & Cyber Security
I
Intezer
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
K
Kaspersky official blog
SecWiki News
SecWiki News
云风的 BLOG
云风的 BLOG
美团技术团队
C
Cybersecurity and Infrastructure Security Agency CISA
博客园 - 【当耐特】
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
Security Latest
Security Latest
C
Cyber Attacks, Cyber Crime and Cyber Security
B
Blog
S
Security Affairs

博客园 - 俩醒叁醉

ASP.NET MVC 4 WebAPI. Support Areas in HttpControllerSelector SQL2000安装问题(转) sql server 2008安装需要一直重启。但重启后又没有达到效果。 为数据库中所有的用户数据表生成分页存储过程 SQL 2005 字段备注获取 __doPostBack方法解析 如何在三个月掌握三年的经验(转载&&笔记) jQuery Ajax的使用 JQuery资源网站 Cookie跨域、虚拟目录 CnBlogsDotText使用实例 轻松搭建博客平台-开源ASP.NET 博客Subtext 的安装 表达式目录树(源MSDN) Web 2.0 编程思想:16条法则 Control Adapter 以下代码提供查询数据库中是否存在某个值 URL Routing MVC Controllers和Forms验证 CSharp——Lambda 表达式
深入分析跨域cookie的问题
俩醒叁醉 · 2009-03-15 · via 博客园 - 俩醒叁醉

原:http://blog.csdn.net/pwlazy/archive/2007/04/23/1576464.aspx

背景: a网站(j2ee,域名a.yourdomain),b网站(rails,域名b.yourdomain),为了使a网站和b网站登陆同步,我们决定采用cookie进行统一管理,在我们的应用中,一般是a网站产生cookie,b网站会修改和删除cookie

在删除cookie时 我们遇到一个很怪的问题就是b网站无法删除a网站建立的cookie

我们通过如下方法:

1)cookies[:ut]={:value=>"",
           :expires=>-1.days.from_now
    }

(此时浏览器确实在执行此动作前发送了cookie,值为x,返回的结果确实是此cookie变成了空,但再次发送请求的时候又发送x)

或者

2)cookies[:ut]=nil

(此时浏览器确实在执行此动作前发送了cookie,值为x,返回的结果确实是此cookie变成了空,但再次发送请求的时候又发送了两个cookie,一个为x,一个为空,服务器这边接受到的是x)

或者

3)cookies.delete :ut

(此时浏览器确实在执行此动作前发送了cookie,值为x,返回的结果确实是此cookie变成了空,但再次发送请求的时候又发送x)和1情况相同

都不行

后来发现

  def clear_ut_cookie
    cookies[:ut]={:value=>"",
      :domain=>"yourdomain",
      :expires=>-1.days.from_now
    }

这样写是可以的,也就是说必须加上:domain=>"yourdomain"

同样的道理,在修改时也是这样,如果不加上:domain=>"yourdomain",浏览器发请求送出cookie a, 服务器请求完毕,浏览器会接受到cookie b,然后浏览器再次发请求,这时会发送cookie a和cookie b 此后你会发现cookie b一直在变,cookie  a  保持不变

总结:做cookie操作最好指定domain,否则跨域的修改和修改不会生效。从上面的各种实践可以看出:如果不指定domain,那么服务器返回的cookie并不会覆盖浏览器中已有的cookie,虽然是同名cookie,但域不同,接着浏览器发送请求的时候,会将两个cookie同时发送,但服务器只会处理其中一个,那就是指定域的。

这个最根本性的原理也解释了为什么会出现上面三种问题

1)没有指定域,但有:expires=>-1.days.from_now,所以第一次请求的时候是cookie a,服务器返回的是cookie b,但cookie b 并没有覆盖cookie a,但因为有:expires,会立马过期,所以发送的时候只会发送cookie a

2)没有指定域,没有expire,所以第一次请求的是cookie a 服务器返回的是cookie b,但cookie b 并没有覆盖cookie a,且cookie b 无:expires, 所以发送的时候会发送cookie a和cookie b。。。。。。

3)和1)同