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

推荐订阅源

MyScale Blog
MyScale Blog
Apple Machine Learning Research
Apple Machine Learning Research
H
Help Net Security
雷峰网
雷峰网
V
Visual Studio Blog
G
Google Developers Blog
Microsoft Azure Blog
Microsoft Azure Blog
Hugging Face - Blog
Hugging Face - Blog
爱范儿
爱范儿
IT之家
IT之家
Engineering at Meta
Engineering at Meta
Microsoft Security Blog
Microsoft Security Blog
aimingoo的专栏
aimingoo的专栏
大猫的无限游戏
大猫的无限游戏
M
MIT News - Artificial intelligence
月光博客
月光博客
A
About on SuperTechFans
B
Blog RSS Feed
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
The GitHub Blog
The GitHub Blog
N
Netflix TechBlog - Medium
J
Java Code Geeks
云风的 BLOG
云风的 BLOG
Blog — PlanetScale
Blog — PlanetScale

博客园 - 俩醒叁醉

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)同