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丢失了,一直找解决办法找了整整两天,百度谷歌一大堆,最终还是没解决。虽然结果让人不满意,不过最后学的东西还是有的,至少知道了几种大家认为能解决问题的方法(虽然在我自己的项目中不能用)。下面IT博客分享一种比较普遍而且被大多数认可的方法以及解决代码。

大家都知道在默认情况下,Cookie与特定的域相关联。例如,IT博客的站点是www.liyumei.net.cn,那么当用户向该站点请求页面时,编写的Cookie就被发送到服务器。(有特定路径值的Cookie除外)。

如果我们的站点有子域(例如liyumei.net.cn、a.liyumei.net.cn和b.liyumei.net.cn),要想把Cookie同特定的子域相关联,我们需要设置Cookie的 Domain 属性,如下所示:

   Response.Cookies( "domain ").Value = DateTime.Now.ToString
Response.Cookies( "domain ").Expires = DateTime.Now.AddDays()
Response.Cookies( "domain ").Domain = "b.liyumei.net.cn"
如果按照这种方式设置域,则Cookie只能用于指定子域中的页面。 当然我们也可以利用Domain属性来创建可在多个子域中共享的Cookie。例如,对域进行如下设置: Response.Cookies( "domain ").Value = DateTime.Now.ToString
Response.Cookies( "domain ").Expires = DateTime.Now.AddDays()
Response.Cookies( "domain ").Domain = "liyumei.net.cn"
这样,该 Cookie 就可用于主域、a.liyumei.net.cn和 b.liyumei.net.cn。 以下是创建一个跨域的Cookie,可以实现同一个根域下的Cookie 如:www.liyumei.net.cn,在这个根域下的所有二级域名可共享Cookie, public static bool CreateCookie(string strCookieName, string strCookieValue,
string strDomain, bool blURLEncode)
{
if (blURLEncode)
{
strCookieValue = System.Web.HttpContext.Current.Server.UrlEncode(strCookieValue);
}
HttpCookie objCookie = new HttpCookie(strCookieName, strCookieValue);
objCookie.Domain = strDomain; //设置Cookie的域名
System.Web.HttpContext.Current.Response.Cookies.Add(objCookie);
return true;
} Cookie有三个属性需要注意一下: . Domain 域 . Path 路径 . Expires 过期时间 跨域操作需要设置域属性: Response.Cookies("MyCookie").Domain = "cnblogs.com"; (这里指的是泛域名) 这样在其它二级域名下就都可以访问到了, ASP 和 ASP.NET 测试通过 虚拟目录下访问: 我在ASP端做了下测试,.NET的没试, 如果不指定Path属性, 不同虚拟目录下Cookie无法共享 将Response.Cookies("MyCookie").Path = "/" 就可以了 总的写法: Response.Cookies("MyCookie").Domain = "cnblogs.com"; Response.Cookies("MyCookie").Path = "/" Response.Cookies("MyCookie").Expires = Now + ; Response.Cookies("MyCookie")("Test") = "test"; .NET 清除Cookie HttpCookie cookie = System.Web.HttpContext.Current.Request.Cookies[cookiename]; if (cookie != null) { cookie.Values.Clear(); SetUserCookieExpireTime(cookiename, -); cookie.Domain = _domain; System.Web.HttpContext.Current.Response.Cookies.Set(cookie); } public static void SetUserCookieExpireTime(string key, int days) { System.Web.HttpContext.Current.Response.Cookies[key].Domain = _domain; System.Web.HttpContext.Current.Response.Cookies[key].Path = _cookiepath; System.Web.HttpContext.Current.Response.Cookies[key].Expires = DateTime.Now.AddDays(days); } .NET 添加/更新Cookie public static void AddUserCookies(string key,string value, string cookiename, string domain) { HttpCookie cookie = System.Web.HttpContext.Current.Request.Cookies[cookiename]; if (cookie == null) { cookie = new HttpCookie(cookiename); cookie.Domain = domain; cookie.Path = _cookiepath; cookie.Values.Add(key, value); HttpContext.Current.Response.AppendCookie(cookie); } else { if (System.Web.HttpContext.Current.Request.Cookies[cookiename].Values[key] != null) { cookie.Values.Set(key, value); } else { cookie.Domain = domain; cookie.Path = _cookiepath; cookie.Values.Add(key, value); HttpContext.Current.Response.AppendCookie(cookie); } } } 以上这种写法可以实现cookie跨域跨目录

ASP.NET中Cookie跨域的问题及解决代码的更多相关文章

  1. asp.net关于Cookie跨域(域名)的问题

    Cookie是一个伟大的发明,它允许Web开发者保留他们的用户的登录状态.但是当你的站点有一个以上的域名时就会出现问题了.在Cookie规范上 说,一个cookie只能用于一个域名,不能够发给其它的域 ...

  2. golang-在gin中cookie跨域设置(配合ajax)

    1.当我在golang中,在前后端分离的情况下使用cookies时发现,跨域没有被允许.代码如下: func AccessJsMiddleware() gin.HandlerFunc { return ...

  3. asp.net中WebResponse 跨域访问示例

    前两天,一个朋友让我帮他写这样一个程序:在asp.net里面访问asp的页面,把数据提交对方的数据库后,根据返回的值(返回值为:OK或ERROR),如果为OK再把填入本地数据库.当时,想当然,觉得很简 ...

  4. Iframe和Frame中实现cookie跨域的方法(转载)

    在Iframe和Frame中默认是不支持Cookie跨域的,但通过设置P3P协议相关的响应头可以解决这一问题.关于p3p协议: P3P: Platform for Privacy Preference ...

  5. 在ASP.NET 5应用程序中的跨域请求功能详解

    在ASP.NET 5应用程序中的跨域请求功能详解 浏览器安全阻止了一个网页中向另外一个域提交请求,这个限制叫做同域策咯(same-origin policy),这组织了一个恶意网站从另外一个网站读取敏 ...

  6. ASP.NET MVC中设置跨域

    ASP.NET MVC中设置跨域 1.什么是跨域请求 js禁止向不是当前域名的网站发起一次ajax请求,即使成功respone了数据,但是你的js仍然会报错.这是JS的同源策略限制,JS控制的并不是我 ...

  7. js基础 js自执行函数、调用递归函数、圆括号运算符、函数声明的提升 js 布尔值 ASP.NET MVC中设置跨域

    js基础 目录 javascript基础 ESMAScript数据类型 DOM JS常用方法 回到顶部 javascript基础 常说的js包括三个部分:dom(文档document).bom(浏览器 ...

  8. 第十四节:Asp.Net Core 中的跨域解决方案(Cors、jsonp改造、chrome配置)

    一. 整体说明 1. 说在前面的话 早在前面的章节中,就详细介绍了.Net FrameWork版本下MVC和WebApi的跨域解决方案,详见:https://www.cnblogs.com/yaope ...

  9. ASP.NET Core-Docs:在 ASP.NET Core 中启用跨域请求(CORS)

    ylbtech-ASP.NET Core-Docs:在 ASP.NET Core 中启用跨域请求(CORS) 1.返回顶部   2.返回顶部   3.返回顶部   4.返回顶部   5.返回顶部 1. ...

随机推荐

  1. 2.SpringBoot之返回json数据

    一.创建一个springBoot个项目 操作详情参考:1.SpringBoo之Helloword 快速搭建一个web项目 二.编写实体类 /** * Created by CR7 on 2017-8- ...

  2. 如何修改SQL Server 2000的数据库逻辑与物理名称

    在项目中使用SQL Server 2000创建了一个数据库,发现名称与另一个数据库太相似,于是决定更改名称,包括: 在企业管理器中看到的数据库名,也是实际应用程序中连接用的数据库名称: 在磁盘上看的物 ...

  3. JS格式化时间并比较

    JS格式化时间,然后进行比较.工作遇到的情况,然后网上找到的,记下来,下次用! </head> <body> <button onclick="myFuncti ...

  4. 全方位掌握nsis脚本

    NSIS 确实是一个不错的安装程序制作软件.新版本 2.0a7 真正实现了中文支持和支持 WinXP 的安装对话框. 不过要用它实现漂亮的安装界面和完美的安装功能就必须好好的写脚本. 而 NSIS 的 ...

  5. HTML5元素2

    用于分组的元素 元素 说明 类型 HTML5与其他的变化 blockquote 表示引自他处的大段内容 流 无变化 dd 用在dl元素之中,表示定义 无 无变化 div 一个没有任何既定语义的通用元素 ...

  6. CCF CSP 201509-2 日期计算

    CCF计算机职业资格认证考试题解系列文章为meelo原创,请务必以链接形式注明本文地址 CCF CSP 201509-2 日期计算 问题描述 给定一个年份y和一个整数d,问这一年的第d天是几月几日? ...

  7. 【洛谷】P4207 [NOI2005]月下柠檬树

    题解 原来自适应simpson积分是个很简单的东西! 我们尝试分析一下影子,圆的投影还是圆,圆锥的尖投影成一个点,而圆台的棱是圆的公切线,我们把圆心投影出来,发现平面上圆心的距离是两两高度差/tan( ...

  8. 13:在O(1)时间内删除单向链表中的一个节点

    思路:如果从首部开始依次查找,那么时间是O(n). 既然我们知道要删除的结点i,那么我们就知道它指向的下一个结点j,那么我们可以将j的内容复制到i,然后将i的指针指向j的下一个结点,这样虽然看起来我们 ...

  9. Oracle截取字符串和查找字符串

    oracle 截取字符(substr),检索字符位置(instr) case when then else end语句使用 收藏 常用函数:substr和instr 1.SUBSTR(string,s ...

  10. CI框架的事务开启、提交和回滚

    1.运行事务 $this->db->trans_start(); // 开启事务$this->db->query('一条SQL查询...');$this->db-> ...