随笔-468  评论-936  文章-3  trackbacks-21

问题:
网站有bbs.xxx.com / main.xxx.com / pay.xxx.com 这三个不同的二级域名站,要实现任何一二级域名处登陆,其他各二级域名的站均登陆。
解决办法:
设置cookie的domain属性。
详细介绍:
把保存用户登陆信息的cookie的域设置成一样即可。
usercookie.Domain=".xxx.com"; 要注意,在域名前必须要加一个"."。
这个设置在登陆和退出的时候都需要。
比较普遍的做法自然是用一个专门负责用户登陆的类来管理这些事务。这样其他登陆页面只要调用这个类就可以,一通百通。
而如果你使用asp.net 2.0 和forms验证,则有更简单的办法来完成这个设置。
web.config中添加了对域的支持,只要按照如下的设置即可:
<authentication mode="Forms">
<forms loginUrl="Login.aspx" domain=".xxx.com"  name=".AutoLinkEduSiteCookie"/>
</authentication>
domain:可选的属性。
指定在传出 Forms 身份验证 Cookie 中设置的可选域。此设置的优先级高于 httpCookies 元素中使用的域。
此属性是 .NET Framework 2.0 版中的新属性。默认值为空字符串 ("")。

注意
无论是哪一种办法,cookie的name一定要相同。

posted on 2006-07-28 14:29 Notus|南色的风 阅读(1499) 评论(7)  编辑 收藏 所属分类: Happy Programming

评论:
#1楼  2006-07-28 18:21 | 高海东      
单点登录不错
  回复  引用  查看    
#2楼  2006-07-28 18:24 | 高海东      
有实际的例子吗

  回复  引用  查看    
#3楼 [楼主] 2006-07-28 18:45 | Notus@再见,博格坎普      
http://community.linkedu.com.cn/
http://pay.linkedu.com.cn/
http://www.linkedu.com.cn
这个网站现在就是.net 2.0 。用的直接在web.config中设置domain的办法


至于具体的代码,文章已经很清楚了吧,只是加一个domain的设置而已。
  回复  引用  查看    
#4楼  2006-07-29 10:55 | dsa [未注册用户]
有没试过main.xx.com是asp写的,pay.xx.com是.net写的,可以这样么?
  回复  引用    
#5楼 [楼主] 2006-08-01 16:51 | Notus@再见,博格坎普      
没有试验过,这个其实是asp和asp.net状态共享的问题吧?
  回复  引用  查看    
#6楼  2006-09-27 10:12 | killkill      
# re: asp.net 1.1/ 2.0 中快速实现单点登陆 2006-07-29 10:55 | dsa
有没试过main.xx.com是asp写的,pay.xx.com是.net写的,可以这样么?

# re: asp.net 1.1/ 2.0 中快速实现单点登陆 2006-08-01 16:51 | Notus@再见,博格坎普
没有试验过,这个其实是asp和asp.net状态共享的问题吧?

只能都用asp.net做的,
这个不是asp和asp.net状态共存的问题。
  回复  引用  查看    
#7楼  2006-12-27 19:41 | wkang [未注册用户]
单靠这样是不行的!!!
要实现 跨应用程序进行 Forms 身份验证
name、protection、path、validationKey 和 decryptionKey 属性必须在所有应用程序中都完全相同。同样,用于 Cookie 数据的加密和验证密钥以及加密方案也必须完全相同。如果设置不匹配,则不能共享 Cookie。
以下是个配置的例子,是帮助文档里的:
<configuration>
<system.web>
<authentication mode="Forms" >
<!-- The name, protection, and path attributes must match
exactly in each Web.config file. -->
<forms loginUrl="login.aspx"
name=".ASPXFORMSAUTH"
protection="All"
path="/"
timeout="30" />
</authentication>

<!-- Validation and decryption keys must exactly match and cannot
be set to "AutoGenerate". The validation algorithm must also
be the same. -->
<machineKey
validationKey="C50B3C89CB21F4F1422FF158A5B42D0E8DB8CB5CDA1742572A487D9401E3400267682B202B746511891C1BAF47F8D25C07F6C39A104696DB51F17C529AD3CABE"
decryptionKey="8A9BE8FD67AF6979E7D20198CFEA50DD3D3799C77AF2B72F"
validation="SHA1" />
</system.web>
</configuration>

  回复  引用