日期:2014-05-17  浏览次数:21187 次

从BS到CS的单点登录
怎么样从BS将登录的用户凭证传给CS程序来实现单点登录

------解决方案--------------------
单点登录的原理应该是 cookie的跨域性~~  主要是解决跨域的问题~~ CS的话 貌似挺难的 
------解决方案--------------------
有难度。。
只能用非主流方法也不知道可不可行。

登陆之后用文件传输密码帐号 容易丢失。。。

或者通讯?
------解决方案--------------------
webService或WCF
------解决方案--------------------
你的单点登录是什么意思呢?
是一个用户上线了,另一个人用这个账号登录的时候是不是就提示该用户已经在线呢?还是说直接把登录这个用户挤下去呢?
我这里倒是有一个方法:
思路大概是这样的,就是一个用户登录了,将用户信息写入SESSION 中,然后在数据库中写一个存储过程,让用户的登录时间和系统时间做差,如果时间小于2分钟(并不是就这一次在判断,自从用户登录的时候起,页面其实一直在刷新,也就说,只要用户在线,系统就会一直判断登录时间和系统时间的差值),登录的时候跳转到提示该用户已经在线的页面,请两分钟之后再试
------解决方案--------------------

Create procedure UserIsonLine
(
  @OperatorName varchar(10),
  @IsOnLine int out
)
as
declare @busy int
declare @State int
begin
  set nocount on
  begin tran
    select @busy = case when abs(datediff(second,LoginTime,getdate()))<120 then 1 else 0 end,
       @State = isnull(IsOnline,0)
    from t_Operator with(tablockx) where OperatorName=@OperatorName
  
    if (@@error <> 0) goto error1
    if (@busy = 1) and (@State = 1)
      set @IsOnLine = 1
    else 
    begin
      set @IsOnLine = 0
      update t_Operator with(tablockx) set LoginTime = getdate(),IsOnLine = 1 where OperatorName=@OperatorName
      if (@@error <> 0) goto error1
    end
  commit tran
  set nocount off
  return 0
end

error1:
begin
  print '出错0001'
  set nocount off
  rollback tran
end

------解决方案--------------------
5楼,人家说的单点登录是这样,比如你在你的软件QQ上登录了,打开WEBQQ的时候就不需登录了,另外再理解就是加入某天网易和新浪合并了,但是两个网站都还在,你只需要登录了网易,那么到新浪也不需要登录了
------解决方案--------------------
你这种我也听说过,以前面试听别人说的,好像微软有中单点登录的实现方法
引用:
5楼,人家说的单点登录是这样,比如你在你的软件QQ上登录了,打开WEBQQ的时候就不需登录了,另外再理解就是加入某天网易和新浪合并了,但是两个网站都还在,你只需要登录了网易,那么到新浪也不需要登录了

------解决方案--------------------
一般都是CS登陆了,BS就不用登陆,你怎么反过来BS登陆了,CS不用登陆。。。。
------解决方案--------------------
或者你可以在BS登陆后,服务端记录访问电脑的信息,然后CS登陆后将本机信息一样采集了去服务端验证,如果一致,就认为是登陆过了,这样有比较大的安全隐患,不知道可不可以获取cookie的md5,如果BS,CS都能获取的话,还能通过MD5验证
------解决方案--------------------
对于无状态的B/S    想解决这个问题  B/S得模拟有状态才行吧,这样貌似开销有点大