关于Cookie跨域操作遇到的问题及解决方法

cookie|解决|问题

  Cookie跨域操作看来是个简单的问题,因为只要指定Domain属性为指定网站的根域名就可以了.但是笔者在实际使用过程中却遇到了一些问题,的确值得注意.

  环境介绍

  cookie在www主域名下创建,并写入Domain属性,如:(为方便调试以下代码皆为asp代码)

  Write.asp

<%
Response.Cookies(CookieName)("UserName") = "SunBird"
Response.Cookies(CookieName)("Password") = "xyz1234"
Response.Cookies(CookieName).Domain = "xxxx.com"
%>

  上面文件放在www主域名下,同时在同目录下放置一个读取cookie的Read.asp

  Read.asp

<%
Response.Write Request.Cookies(CookieName)("UserName")
Response.Write Request.Cookies(CookieName)("Password")
%>

  再放一个Read.asp文件到另外一个子域名站点里,代码同上。最后我们再做一个清除cookie的Clear.asp放在主域名下

  Clear.asp

<%
Response.Cookies(CookieName)("UserName") = ""
Response.Cookies(CookieName)("Password") = ""
Response.Cookies(CookieName).Domain = "xxxx.com"
%>

  现在可以通过下面的执行顺序来测试,Write.asp-->主域名的Read.asp-->子域名的Read.asp 所有Read.asp页面都可以读取到Write.asp创建的cookie的值,然后再运行Clear.asp进行清除,一切都Ok,看上去没有什么问题。

  但是把这种方法运用到实际的站点时却出现问题了。

  问题描述:

  第一次登录一切ok,所有子域名都可以访问到主域名存储的cookie,但是,一旦退出之后,子域名的cookie被清除了,但是主域名的cookie仍然保留着,强行清除主域名的cookie之后,无论怎样登录主域名下都无法保存cookie了,除非关掉浏览器重新打开。

  经过多次尝试之后,无意中发现问题所在,以下是测试经过。

  创建一个Write2.asp的页面放在主域名下

<%
Response.Cookies(CookieName)("TEST_COOKIE") = "TEST_COOKIE"
%>

  第一步:关闭浏览器后,按以下顺序执行,Write.asp-->主域名的Read.asp-->子域名的Read.asp 到这里所有Read.asp读取正常。

  第二步:Clear.asp-->主域名的Read.asp-->子域名的Read.asp 到这里清除操作是成功的。

  第三步:Write.asp--> Write2.asp --> 主域名Read.asp --> 子域名Read.asp 到这里两个Read.asp都可以读取到cookie的值。

  第四步:重新执行第二步,发现主域名Read.asp仍然输出了值,而子域名下的Read.asp的值已经被清空了。

  根据以上测试总结以下几点再跨域使用cookie时需要注意的地方

  1、当你有一个Cookie组(或叫Cookie字典)使用Domain属性指定域名之后,当你在对该组的成员进行修改或新增的时候,一定要在操作之后加上Resonse.Cookies(CookieName).Domain属性。

  2、如果没有必要,请不要修改已设置Domain的Cookie组,直接使用Response.Cookies("CookieText") = CookieValue 来创建一个新的Cookie。

时间: 2024-09-11 20:58:18

关于Cookie跨域操作遇到的问题及解决方法的相关文章

Cookie跨域操作解决方案

Cookie跨域操作看来是个简单的问题,因为只要指定Domain属性为指定网站的根域名就可以了. 但是笔者在实际使用过程中却遇到了一些问题,的确值得注意. 环境介绍 cookie在www主域名下创建,并写入Domain属性,如:(为方便调试以下代码皆为asp代码) Write.asp <% Response.Cookies(CookieName)("UserName") = "SunBird" Response.Cookies(CookieName)(&quo

AJAX的跨域访问-两种有效的解决方法介绍_php技巧

新的W3C策略实现了HTTP跨域访问,还亏我找了很久的资料解决这个问题:只需要在servlet中返回的头部信息中添加Access-Control-Allow-Origin这个既可.比如我要开放所有我本地的跨域访问,就设置如下:response.setHeader("Access-Control-Allow-Origin", "http://127.0.0.1/*");这样我本地的A工程中的AJAX请求就可以跨域请求B工程中的servlet.代码如下:HTML的JS的

ajax跨域访问报错501的解决方法_AJAX相关

问题:ajax跨域访问报错501 运行下面的代码会报错501 $.ajax({ type: "POST", url: "http://192.168.1.202/sensordata.php", contentType:'application/json; charset=utf-8', data: JSON.stringify(ajaxPostData), dataType:'json', success: function(data){ //On ajax su

ajax跨域请求js拒绝访问的解决方法_AJAX相关

求解决办法 复制代码 代码如下: ajax{ url :"http://xxxx/app", type:"POST"; dataType:"json", } 不能用jsonp 因为jsonp发送数据 type 为 get type 必须为post url 不能加参 (例:http://xxxx/app?callback=aaa) 返回数据位json格式.求方法

ajax跨域请求js拒绝访问的解决方法

求解决办法 复制代码 代码如下: ajax{ url :"http://xxxx/app", type:"POST"; dataType:"json", } 不能用jsonp 因为jsonp发送数据 type 为 get type 必须为post url 不能加参 (例:http://xxxx/app?callback=aaa) 返回数据位json格式.求方法

ASP.NET中Cookie跨域的问题及解决代码

ASP.NET中Cookie跨域的问题及解决代码 http://www.liyumei.net.cn/post/share18.html Cookies揭秘  http://www.cnblogs.com/zhangziqiu/archive/2009/08/06/cookies-javascript-aspnet.html 最近在项目开发中遇到一个很棘手的问题,一个用户在顶级域名登录后,跳转到自己所拥有的二级域名下管理二级网站时,cookie丢失了,一直找解决办法找了整整两天,百度谷歌一大堆,

Java端和js端cookie跨域共享

问题描述 Java端和js端cookie跨域共享 关于cookie共享技术,查了网上的资料,有两种方式:后台服务端和前台js端. 我在网站A后台服务端设置cookie如下: Cookie cookie = new Cookie("mobile", "*****"); cookie.setPath("/"); cookie.setDomain("cms.ban.net"); response.addCookie(cookie);

cookies-新人求助,cookie跨域的问题

问题描述 新人求助,cookie跨域的问题 原来登录自家页面,cookie什么的问题,也没关心过它工作细节,现在多出来个网站,要在这个网站也登录我站的号,用ajax跨域登录,能登录成功,但cookie传递有问题了,我站后端无法靠cookie辨认身份了,不知道怎么办 解决方案 http://blog.csdn.net/ms_x0828/article/details/7662066 解决方案二: 关于Cookie跨域的问题关于Cookie跨域的问题关于Cookie跨域的问题 解决方案三: http

JS未跨域操作iframe里的DOM_javascript技巧

这里简单说明两个方法,都是未跨域情况下在index.html内操作b.html内的 DOM. 如:index.html内引入iframe,在index内如何用JS操作iframe内的DOM元素? 先贴下index.html和iframe引入的a.html内容. index-> <div class="d1"> <iframe src="a.html" frameborder="0" name="one"