服务器
A
:网站
A
服务器
B
:网站
B
服务器
C
:验证网站(验证表中有
UID
和
KEY
两个字段)。
1.
用户打开网站
A
的页面
http://
服务器
A/a.aspx
,检测发现网站
Session
中没有存储用户名
UID
。
2.
系统转到验证服务器登录页面,并在
QUERYSTRING
中附加前一个页面的
URL
地址。比如
http://
服务器
C/login.asp?URL=http://
服务器
A/a.aspx
3.
在验证服务器登录成功后更新验证服务器的
Session
(超时设置为足够长,比如
1
天)。然后生成一个
GUID
值,写入验证表。最后,把这个
GUID
值和
UID
保存到一个类中序列化后附加在
URL
中返回网站
A
的那个页面。比如
http://
服务器
A/a.aspx?
token
=sadhsagdkjasgyugd7d8yweihasdiuhagsdiuashdhaiushdi
4.
网站
A
的页面读取
QUERYSTRING
,然后反序列化出一个类,读取类的
UID
和
KEY
信息。然后,从数据库中查找匹配的记录,如果找到了则表明登录成功,并把这条记录的
KEY
更新成另外一个
GUID
(这样就保证了即使这个
URL
被别人拿走再登录都不能成功)。把
UID
写入服务器
A
的
Session
中即可。
5.
用户打开网站
B
的页面
http://
服务器
B/b.aspx
,服务器
B
上没有当前用户的
Session
信息,自动转向验证服务器检测是否存在
Session
,如果找到了表明用户已经登录过,再重复步骤
3
和
4
,如果没有找到就转到验证服务器的登录页面。