怎样实现像csdn的多站点的登录和注销功能?

解决方案 »

  1.   

    你去搜索下SESSION共享就能够解决问题了吧
      

  2.   

    这个问题是一个单点登陆的实现:首先有这样一个概念SSO 概念:SSO的一种偏向技术的说法:用户只需登陆一次,就可使用多个SSO       enable的应用系统。   (1)、单一的登陆点。理想的情况是用户通过任何应用系统都能进行SSO,这对于基于Web的系统是可行的。这种单一的登陆点在整个系统的设计中是唯一认证用户的地方,由登陆点将SSO       token(针对不同的C/S,B/S应用可能还需要传递用户名,口令)传递给应用系统,应用系统利用SSO       token来进行用户已认证的验证。我们将这个单一的登陆点称为SSO       Entry。   (2)、SSO       enable意味着对应用系统的修改不可避免。并不是任何系统都能够使用SSO,只有那些符合SSO规范,使用SSO       API的应用系统才具有SSO的功能。简单地说就是要修改已有的应用系统,屏蔽已有的应用系统的用户认证模块,使用系统提供的SSO       API来验证用户,以及对用户的操作进行授权。   (3)、需要统一的认证,权限信息库。通常,认证与授权管理模块以一种应用专有的方式实现,系统的授权模型、认证,授权信息存贮结构与访问控制逻辑与应用的业务逻辑之间耦合紧密。这种设计与实现方式的缺点是显而易见的:由于认证、授权模块与应用逻辑之间的紧耦合使得认证、授权模块很难进行扩展与维护;认证、授权模块的设计与编码需要很大的工作量,而且很难在不同的应用系统之间共享与重用。这也是越来越多企业应用需要SSO的原因之一。   SSO要求有统一的认证,权限存放库。但现实中,有的系统无法使用外部的认证,授权信息库,所以就需要在应用系统和Portal       Server之间进行认证,同时进行授权信息的数据同步。   登录   
    1.   打开A网站进行登录;   
    2.   检测Login服务器是否可用;   
    3.   如果Login服务器可用,检测发现Login服务器Session未创建;   
    4.   重定向到A网站的页面,接受Login服务器传来的Key和UID组成的类序列化后的数据;   
    5.   得到的Key是1,说明Login服务器Session未创建,在A网站创建Session,登录完成后使用   <script>   访问Login服务器上的页面创建Session并记录网站名和网站登出页面地址;   
    6.   打开B网站登录,发现没有登录,检测Login服务器是否可用;   
    7.   如果Login服务器可用,检测发现Login服务器Session已经创建并记录网站名和网站登出页面地址;   
    8.   重定向到B网站的页面,接受Login服务器传来的Key和UID组成的类序列化后的数据;   
    9.   得到的Key不是1,说明Login服务器Session已经创建,根据Key到数据库进行验证,验证通过后在B网站创建Session。   
    登出   
    1.   每个网站都有登出按钮,点击按钮后先清空本地Session;   
    2.   然后检测Login服务器是否可用;   
    3.   可用的话跳转到Login服务器的登出页面;   
    4.   根据Session中存储的已登录网站名和登出页面地址,生成   <img>   指向各个网站的登出页面;   
    5.   登出成功后登出页面显示图片(返回图片流),如果登出失败(页面不能访问)则显示本地登出失败图片。   特点   
    1.   Login服务器就算Down了各个网站也能分别登录和登出;   
    2.   巧妙使用临时GUID来做验证令牌;   
    3.   巧妙使用script和img的src来访问登录登出页面创建和撤销Session。