在Forms验证模式下,实现多个站点(SubDomain相同)共享同一用户登录状态
今天一早看了dudu关于二级域名Cookie的问题及解决方法,认为dudu的原理解释不是十分明确,不能确定dudu的代码
FormsAuthentication.SetAuthCookie后添加下属代码
HttpCookie cookie = Request.Cookies[".DottextCookie"];
if(cookie!=null)
{
cookie.Domain = ".cnblogs.com";
Response.Cookies.Add(cookie);
} ”是否是笔误。因为在FormsAuthentication.SetAuthCookie之后,cookie只是被加入了Response的cookies队列中而已,我想正确的代码应该如下:
FormsAuthentication.SetAuthCookie(txtName.Text,false);
HttpCookie lcookie = Context.Response.Cookies[FormsAuthentication.FormsCookieName];
lcookie.Domain = ".cnblogs.com";//
Response.Redirect(FormsAuthentication.GetRedirectUrl(txtName.Text,false));
共享用户登录状态的原理解释如下:
Asp.net中的Forms验证方式,在服务端通过用户验证的代码一般如下:
FormsAuthentication.RedirectFromLoginPage("UserName", false);//该代码写一个加密的Cookie.该Cookie存储UserName等加密信息。但是在Asp.net中,该Cookie的Domain值是为空,表示以游览器默认的页面请求路径的Domain值作为cookie的domain存储。如果浏览器以www.cnblogs.com/login.aspx 登录,那么该浏览器存储cookie的时,该cookie的domain为www.cnblogs.com。这样如果浏览器请求页面 http://caomao.cnblogs.com/admin/EditPosts.aspx,此时,浏览器不会把刚才存储的cookie值作为Request的Cookie向服务器发送。因为caomao.cnblogs.com和www.cnblogs.com是完全不同的主域名。
cookie的domain属性就是为了让浏览器根据页面请求路径的domain值,获取匹配的cookie,并把这些cookie发送给服务器。而匹配的方式有两种:
1、主Domain完全相同. 比如 页面请求路径的Domain一直是www.cnblogs.com。而domain为“caomao.cnblogs.com”的cookie是不匹配的
2、SubDomain相同, 比如,如果在caomao.cnblogs.com/上写的cookie指定了该cookie的domain为"cnblogs.com",那么在浏览器请求www.cnblogs.com时,该cookie被匹配,即该cookie也会被发送给www.cnblogs.com服务器端。
为了在www.cnblogs.com的也能读取在caomao.cnblogs.com上存储的用户已经登录的cookie信息,必须让该cookie的domain设置为"cnblogs.com"。但是正如上面所述,Asp.net的FormsAuthentication.RedirectFromLoginPage("UserName", false);记录用户登录的cookie的domain为空。所以我们不能用FormsAuthentication.RedirectFromLoginPage("UserName", false);方式,而必须以下面的代码代替:
FormsAuthentication.SetAuthCookie(txtName.Text,false);
HttpCookie lcookie = Context.Response.Cookies[FormsAuthentication.FormsCookieName];
lcookie.Domain = ".cnblogs.com";//
Response.Redirect(FormsAuthentication.GetRedirectUrl(txtName.Text,false));
经过该代码处理的Forms验证登录的User,再去访问www.cnblogs.com时,就能共享该已登录信息。同样的,如果在www.cnblogs.com登录时也用上述代码,在caomao.cnblogs.com时,也能共享该已登录信息。
关于用户的注销处理也需要做类似的改动,具体代码如下:
FormsAuthentication.SignOut();
//get the expired cookie
HttpCookie lcookie2 = Context.Response.Cookies[FormsAuthentication.FormsCookieName];
//set the cookie Domain
lcookie2.Domain = ".cnblogs.com";
说到这里,不知道大家是否已经清楚?由于表达能力所限,敬请谅解。附上具体实例代码,供参考:/Files/caomao/SecondDomain.rar。
在本机仿真两个同SubDomain的环境,可以在本机的操作系统安装路径下的host文件中添加两个host:我添加了:(第一作为主域,第二个作为二级域)
127.0.0.1 http://www.zendyhu.com/
127.0.0.1 Second.zendyhu.com
转载于:https://www.cnblogs.com/qiantuwuliang/archive/2009/03/09/1406616.html
在Forms验证模式下,实现多个站点(SubDomain相同)共享同一用户登录状态相关推荐
- 《南溪的目标检测学习笔记》——验证模式下出现“Process finished with exit code 137 (interrupted by signal 9: SIGKILL)“的问题
1 问题描述 在验证模式下运行代码的时候,出现这样的错误: Process finished with exit code 137 (interrupted by signal 9: SIGKILL) ...
- Asp.Net使用加密cookie代替session验证用户登录状态 源码分享 欢迎拍砖
小论坛地址: http://rayyu.5d6d.com/thread-9444-1-1.html 正文: 首先 session 和 cache 拥有各自的优势而存在. 他们的优劣就不在这里讨论了. ...
- vue router.beforeEach跳转路由验证用户登录状态
使用vue判断验证用户登录状态 导航钩子类似于生命周期钩子,包含路由进入前,进入后,更新时,退出前等几个周期,主要用于控制导航的前进后退或跳转等. 其中router.beforeEach就是路由进入前 ...
- 模拟用户登录过程,验证用户名、密码和校验码,如果全部正确提示用户登录成功,否则,提示用户相关输入错误
要求:模拟用户登录过程,验证用户名.密码和校验码,如果全部正确提示用户登录成功,否则,提示用户相关输入错误. 目的:掌握登录校验的规则和原理. //登录验证 #include<stdio.h&g ...
- 抽屉之Tornado实战(9)--装饰器实现用户登录状态验证
当然今天讲的验证,不只Tornado会用,以后用到web框架都会用到,最常见的场景就是只有用户登陆了才能执行某些操作,所以在执行这些操作前要先做登陆状态的验证. 比如:点赞,发布,评论等需要验证,都需 ...
- ASP.NET Forms验证 实现子域名(SubDomain)共享登陆下的缺陷 [转]
一.什么是单点登录 单点登录就是在多个web应用程序中,实现统一登录方式,一但登录了某web应用程序,其它相关联的web应用程 序都无需再次登录,一个地方退出,所有相关联的web应用程序都退出. 二. ...
- 浅谈ASP.NET Forms验证
ASP.NET Forms验证 用户验证是每一个项目必须的一个模块,由于已经很久没有碰到这一块内容,今天写一个用户验证居然脑子一片空白.于是乎就和一个同事进行了一片讨论,晚上回家决定把讨论的结果给记录 ...
- 如何修改SQL Server 2000身份验证模式和系统管理员
大家安装SQL Server 2000时,很多人都习惯性的一路下一步,最后就会以windows身份验证作为登录数据库服务器的方式,假如有一天你后悔了,想以sql server的验证方式登陆,那怎么办呢 ...
- 单realm模式下前后端分离实现springboot+shiro+jwt+vue整合
shiro+jwt实现前后端分离 一.RBAC概念 基于角色的权限访问控制(Role-Based Access Control)作为传统访问控制(自主访问,强制访问)的有前景的代替受到广泛的关注.在R ...
最新文章
- mysql5.7 temp_MySQL5.7-学习笔记(kylix)-2019.3.29-tempundo
- FaaS、PaaS和无服务器体系结构的优势
- Python中函数的参数传递与可变长参数
- MYSQL查看和修改存储引擎
- Docker 初级教程
- [云炬创业学笔记]第二章决定成为创业者测试1
- iframe懒加载_前端常见问题
- css网格_一个CSS网格可以全部统治
- 【Python】处理 pydotplus.graphviz.InvocationException: GraphViz’s executables not found
- Selenium alert 弹窗处理
- 改变checkbox样式问题
- 2018-12-20 第二章Java 预习作业
- 小米笔记安装双系统linux,小米笔记本电脑怎么安装双系统?-小米win7
- OpenGL GLM环境配置
- H5 网络版坦克大战
- 浏览器网页打开与关闭快捷键
- python代码审查规则_python代码检查
- 【java】数组的定义以及初级运用精讲(起点闭关计划)
- 【视频分享】尚硅谷HTML5前端视频_Vue核心技术视频
- Smartbi与华为云强强联合,共建云上BI新生态