所谓的单一登录是指用户在一个站点如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";

///

/// 设置用户 Cookie 信息

///

/// 用户名称

/// Cookie有效时间选择值

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";

java cookie domain_设置cookie的domain属性相关推荐

  1. python获取cookie值的方法_Python获取Cookie、设置Cookie的N种方法

    方法一通过python的requests包: import requests url = "https://fanyi.baidu.com" res = requests.get( ...

  2. java中自定义设置cookie(设置同父域解决跨域获取值得问题)

    1.先在web环境下任意地方获取request,response,session,备用 ServletUtils.java import java.io.IOException; import jav ...

  3. java 存储cookie_java设置cookie,存储和读取 | 学步园

    /**[[[[[[[[[[这里是存储的一种方式]]]]]]]]]]]]] * 设置cookie:根据用户的选择设置默认树 * 将设置的axis的value存入cookie */ @RequestMap ...

  4. 【cookie】设置cookie过期时间 超时时间,Cookie 设置 expires

    Cookie是什么: 简单地说,cookie 就是浏览器储存在用户电脑上的一小段文本文件.cookie 是纯文本格式,不包含任何可执行的代码.一个 Web 页面或服务器告知浏览器按照一定规范来储存这些 ...

  5. cookies的时限是多少_【cookie】设置cookie过期时间 超时时间,Cookie 设置 expires

    Cookie是什么: 简单地说,cookie 就是浏览器储存在用户电脑上的一小段文本文件.cookie 是纯文本格式,不包含任何可执行的代码.一个 Web 页面或服务器告知浏览器按照一定规范来储存这些 ...

  6. html5 ios cookie,iOS设置cookie到web遇到的坑

    获取本地的cookie,[SystemConfigure shareSystemConfigure].get_kHttpURL]留意用自己本地的域名,获取本地的登录的cookie信息 - (NSStr ...

  7. 微信小程序获取cookie以及设置cookie

    小程序开发中我们需要获取到后端给的cookie进行请求验证,但是微信并没有帮我们保存cookie,那么我们要维持会话需要自己来保存cookie,并且请求的时候加上cookie 1.获取cookie 在 ...

  8. html domin属性,cookie中的path与domain属性详解

    1.domain表示的是cookie所在的域,默认为请求的地址,如网址为www.jb51.net/test/test.aspx,那么domain默认为www.jb51.net.而跨域访问,如域A为t1 ...

  9. Python Django Cookie的设置和获取相关属性

最新文章

  1. eclipse: Program g++ not found in PATH
  2. ItemAdding事件接收器中无法取到【创建者】的字段的值
  3. predis如何实现phpredis的pconnect方法
  4. 【STM32】 keil软件介绍--工程目标选项配置(上)
  5. 开发文件服务器,易语言开发文件服务器
  6. 在多种浏览器中嵌入Applet
  7. 计算机网络项目实训教程课后答案,计算机网络项目实训教程
  8. oracle找到表的位置,查看Oracle表中的指定记录在数据文件中的位置
  9. PRD:「FITLIFE」小程序产品需求文档(用户端)
  10. 2.栅格的类中同时设置col-md-* col-sm-*的作用
  11. docker中的hassio升级_趣说Docker
  12. H.264 无参考视频质量评价方法 (使用了基于遗传编程方法的符号回归)
  13. java 实例化数组_java数组实例化
  14. jarsigner 命令对 apk 加密
  15. [openssl]centos version ‘libcrypto.so.10‘ not found
  16. 重启iis最快速的方法
  17. 气象统计 第八次实习 EOF分析
  18. ★40个经典的社交心理学现象
  19. android锁屏是弹出窗口,Android锁屏状态下弹出activity
  20. 关机一直显示正在关闭服务器,电脑关机后,显示正在关机,但等半天也关不了 怎么办...

热门文章

  1. 全自动智能声波电动牙刷芯片——DLTAP602SA
  2. dream weaver_具有定制汇编程序,Weaver和运行时的可插拔知识
  3. java.lang.NoClassDefFoundError: org/aspectj/weaver/tools/PointcutPrimitive
  4. thymeleaf 数字格式化
  5. ☀️机器学习实战☀️基于 YOLO网络 的人脸识别 |(文末送机器学习书籍~)
  6. 单例中的懒汉和恶汉模式的区别
  7. C++PRIMER 学习笔记
  8. mysql安装服务 deied_Mysql安装错误:Install/Remove of the Service Denied!解决办法
  9. centos7软件仓库资源的修改与配置
  10. Arduino使用 单路继电器