cookie的作用域是domain本身以及domain下的所有子域名。
cookie的作用域是domain本身以及domain下的所有子域名。
cookie的作用域是domain本身以及domain下的所有子域名。
cookie的作用域是domain本身以及domain下的所有子域名。
1.cookie和session成对,匹配出现的。跟踪用户信息
2.Cookie 技术诞生以来,它就成了广大网络用户和 Web 开发人员争论的一个焦点。有一些网络用户,甚至包括一些资深的 Web 专家也对它的产生和推广感到不满,这并不是因为 Cookie 技术的功能太弱或其他技术性能上的原因,而是因为 Cookie 的使用对网络用户的隐私构成了危害。因为 Cookie 是由 Web 服务器保存在用户浏览器上的小文本文件,它包含有关用户的信息。
3.Cookie 技术诞生以来,它就成了广大网络用户和 Web 开发人员争论的一个焦点。有一些网络用户,甚至包括一些资深的 Web 专家也对它的产生和推广感到不满,这并不是因为 Cookie 技术的功能太弱或其他技术性能上的原因,而是因为 Cookie 的使用对网络用户的隐私构成了危害。因为 Cookie 是由 Web 服务器保存在用户浏览器上的小文本文件,它包含有关用户的信息[2] 。
4.Cookie 技术诞生以来,它就成了广大网络用户和 Web 开发人员争论的一个焦点。有一些网络用户,甚至包括一些资深的 Web 专家也对它的产生和推广感到不满,这并不是因为 Cookie 技术的功能太弱或其他技术性能上的原因,而是因为 Cookie 的使用对网络用户的隐私构成了危害。因为 Cookie 是由 Web 服务器保存在用户浏览器上的小文本文件,它包含有关用户的信息[
5.Cookie 在计算机中是个存储在浏览器目录中的文本文件,当浏览器运行时,存储在 RAM 中发挥作用 (此种 Cookies 称作 Session Cookies),一旦用户从该网站或服务器退出,Cookie 可存储在用户本地的硬盘上 (此种 Cookies 称作 Persistent Cookies)[3] 。
6.Cookie 在计算机中是个存储在浏览器目录中的文本文件,当浏览器运行时,存储在 RAM 中发挥作用 (此种 Cookies 称作 Session Cookies),一旦用户从该网站或服务器退出,Cookie 可存储在用户本地的硬盘上 (此种 Cookies 称作 Persistent Cookies)[3] 。
7/Cookie 在计算机中是个存储在浏览器目录中的文本文件,当浏览器运行时,存储在 RAM 中发挥作用 (此种 Cookies 称作 Session Cookies),一旦用户从该网站或服务器退出,Cookie 可存储在用户本地的硬盘上 (此种 Cookies 称作 Persistent Cookies)[3] 。
8.当domain为自身域名时,那么其父域名受影响,其本身与其子域名可以接收到cookie。
9.当domain为自身域名时,那么其父域名受影响,其本身与其子域名可以接收到cookie。
10.当domain为自身域名时,那么其父域名受影响,其本身与其子域名可以接收到cookie。
9.
跨站Cookie
跨站Cookie
设置cookie的domain属性
设置cookie的domain属性
所谓的单一登录是指用户在一个站点如www.studyez.com登录后切换到另一个站点communty.studyez.com时也自动 被community的Server判断为已经登录,反过来,只要用户在community.studyez.com登出后,切换到 www.studyez.com时后www的Server也会判断到这一用户已经登出。
限制条件:
1.所有要求单点登录的站点间共享同一用户数据库,这点应该不需要任何解释的吧。
2. 要求所有站点在同一父域名之下。这里所说的单点登录是指在同一个域名下不同子域名之间的单点登录,直接的例子就是像这样的站点之间的跨站单点登 录: www.studyez.com, community.studyez.com, serach.studyez.com, mail.studyez.com, mms.studyez.com 等, 他们属于一个共同的父域名studyez.com, 之所以有这么多子域名,是因为有很多子系统的时候用不同的子域名对于开发、部署和管理都能方便很多, 而且对于用户访问量很大的站点,可能每个子域名都会有很多的服务器来伺服。这是比较符合目前很多站点的模式和需求的。
对于非同一父域名下的域名间跨站登录,最好的方式是采用Passport的原理来实现,具体实现可以参考Passport文档,因此不在本文讨论范围之内。
原理:
在不同的子域名之间实现单点登录的最佳途径是采用Cookie的Forms认证。他的原理简单的来说,就是让Forms Authentication生成的Cookie能够跨域名访问。
先谈一下Cookie的限制,对于一个任何Http Request来说,提交给Server端的时候,它能够安全访问的Cookie的域名必须在这个HTTP Reuqest的域名路径中。举例来说,发出一个http://communiy.corp.studyez.com/的 请求时,随着这个http request一块发送到server端的cookies会自动包括所有 以 community.corp.studyez.com, .corp.studyez.com, corp.studyez.com, .studyez.com, studyez.com 为域名的Cookies,这是由Cookie本身的规范所限制的,浏览器如果不是按照这个规范实现,那么就会存在严重安全漏洞,因为那样的话意味着任何一 个服务器都可以读到同一个用户访问别的网站时留下的Cookie。
根据上面所述Cookie的限制性,可以得出,对于前面 www.studyez.com, community.studyez.com等站点的例子来说,就是想办法如何让 Forms Authentication生成的Cookie的域名限定为.studyez.com或者studyez.com,而不是默认的 www.studyez.com 和 communty.studyez.com,这样就使得单一登录需求的实现成为可能。
今天先写这么多,接下来几天会继续写实现和局限性。
程序代码// 用户 Cookie 存储键
public const string CookieUser = "devin_cn_user";
// 用户Cookie名称键
public const string CookieUserName= "UserName";
/// <summary>
/// 设置用户 Cookie 信息
/// </summary>
/// <param name="UserName">用户名称</param>
/// <param name="CookieSave">Cookie有效时间选择值</param>
private void SetCookie(string UserName,int CookieSave)
{
//设置Cookie值
HttpCookie cookie = new HttpCookie(CookieUser);
//设置域Cookie
cookie.Domain = ".devin.cn";
//设置用户名称
cookie.Values.Add(CookieUserName, UserName);
//设置Cookie身份验证码
cookie.Values.Add(CookieUserCode, this.CookieCode().ToString());
//根据选择,设置Cookie有效时间
switch (CookieSave)
{
case 0:
cookie.Expires = DateTime.Now; //即时
break;
case 1:
cookie.Expires = DateTime.Now.AddDays(1); //一天
break;
case 2:
cookie.Expires = DateTime.Now.AddDays(7); //七天,一周
break;
case 3:
cookie.Expires = DateTime.Now.AddMonths(1); //一月
break;
case 4:
cookie.Expires = DateTime.Now.AddYears(1); //一年
break;
}
//在保存 Cookie 信息之前,删除原有Cookie信息以避免重复
HttpContext.Current.Response.Cookies.Remove(CookieUser);
//保存Cookie信息
HttpContext.Current.Response.SetCookie(cookie);
//登陆认证
FormsAuthentication.RedirectFromLoginPage(UserName,false);
}
就是这一句吧
//设置域Cookie
cookie.Domain = ".devin.cn";
20.
今天研究一天发现cookie无法设置除当前域名或者其父域名之外的其他domain.
这个是浏览器出于对cookie的保护造成的,也就是cookie无法跨域设置。
21.
今天研究一天发现cookie无法设置除当前域名或者其父域名之外的其他domain.
这个是浏览器出于对cookie的保护造成的,也就是cookie无法跨域设置。
对于子域名也有如下规则,当前域名只能设置当前域名以及他的父域名,不能设置子域名
如在www.wo.cao.baidu.com 域名下只能设置 cao.baidu.com,baidu.com
不能设置 da.jia.wo.cao.baidu.com的cookie。
一篇文章还不错,摘录下来
当我们给网站设置cookie时,大家有没有发现在网站的其他域名下也接收到了这些cookie。这些没用的cookie看似不占多少流量,但如果对一个日PV千万的站点来说,那浪费的资源就不是一点点了。因此在设置cookie时,对它的作用域一定要设置准确了。
我们都知道在PHP中用setcookie 来设置网站的cookie,该函数的用法如下:
今天我们就来探讨一下它的第五个参数$domain,因为它决定了cookie的作用域。
现在有如下3个域名,一个顶级域名、一个二级域名和一个三级域名:
① zydya.com
②blog.zyday.com
③one.blog.zyday.com
- 首先在①zyday.com域名下设置cookie,做四次测试,分别设置domain参数为空、'zyday.com'、'blog.zyday.com'与'one.blog.zyday.com'。
√表示该域名下能取到cookie,×表示不能取到cookie
domain参数 | zydya.com | blog.zyday.com | one.blog.zyday.com |
setcookie('name',1,time()+1) | √ | √ | √ |
setcookie('name',1,time()+1,'/','zyday.com') | √ | √ | √ |
setcookie('name',1,time() +1,'/','blog.zyday.com') |
× | × | × |
setcookie('name',1,time() +1,'/','one.blog.zyday.com') |
× | × | × |
当domain设置为空时,domain默认为当前域名,并且该域名下的子域名都可以接收到cookie。
但是domain参数设置其子域名时,所有域名就接收不到了,包括那个子域名。
- 然后在②blog.zyday.com域名下设置cookie,测试条件同上
domain参数 | zydya.com | blog.zyday.com | one.blog.zyday.com |
setcookie('name',1,time() +1) |
× | √ | √ |
setcookie('name',1,time()+1,'/','zyday.com') | √ | √ | √ |
setcookie('name',1,time()+1,'/','blog.zyday.com') | × | √ | √ |
setcookie('name',1,time()+1,'/',one.blog.zyday.com') | × | × | × |
看第二行,domain参数是zyday.com,是blog.zyday.com的父域名,那么zyday.com下所有子域名(包括zyday.com、blog.zyday.com、one.blog.zyday.com)都能接收到cookie。
当domain为自身域名时,那么其父域名受影响,其本身与其子域名可以接收到cookie。
而设置其子域名或其他域名时,所有域名都接收不到cookie了。
- 最后在③one.blog.zyday.com域名下设置cookie
domain参数 | zydya.com | blog.zyday.com | one.blog.zyday.com |
setcookie('name',1,time() +1) |
× | × | √ |
setcookie('name',1,time()+1,'/','zyday.com') | √ | √ | √ |
setcookie('name',1,time()+1,'/','blog.zyday.com') | × | √ | √ |
setcookie('name',1,time()+1,'/',one.blog.zyday.com') | × | × | √ |
第三个测试得出的结论在上面已经总结了。再看一遍,这里就不多解释了。
domain的设置,有两点要注意:
1.在setcookie中省略domain参数,那么domain默认为当前域名。
2.domain参数可以设置父域名以及自身,但不能设置其它域名,包括子域名,否则cookie不起作用。
那么cookie的作用域:
cookie的作用域是domain本身以及domain下的所有子域名。