SSO与用户登录问题容易混淆

单点登陆(SSO),多个系统一次登陆权限均配,
彼此访问无需要再次登陆!
大多都是用webservice实现令牌传递,跨系统,跨平台的权限验证。

用数据表实时性不是很好,要总刷新,数据库压力大
如果程序出错,比如操作数据库失败,就不准确了

用Application比较好,但是频繁操作Application会对网站的性能有影响

最好的办法就是设置一个静态变量
asp.net的静态变量就是为了干这个的
因为静态变量是类的全部实例共享的

我用这种方法写了一段代码,这段代码是适用于windows验证的情况,代码编译通过,我没有测试,但是道理是这样的。
-------------------------------------------------------------------------------
1. 定义一个通用类


using System;
using System.Collections;

namespace Web
{
/// <summary>
/// CheckUserLogon 的摘要说明。
/// </summary>
public class CheckUserLogon
{

public static Hashtable userList = new Hashtable();

public CheckUserLogon()
{
//
// TODO: 在此处添加构造函数逻辑
//
}

public static void AddUserList( string user )
{
userList.Add( user , "online" );
}

public static void RemoveUserList( string user )
{
userList.Remove( user );
}

public static bool CheckUserLogined( string user )
{
if ( userList.ContainsKey( user ) )
{
return true;
}
else
{
return false;
}
}


}
}

2.在Global.asax中修改session_start()和session_end()

protected void Session_Start(Object sender, EventArgs e)
{
if ( CheckUserLogon.CheckUserLogined( this.User.Identity.ToString() ) )
{ //如果已经有同名用户登录,就清空session,这样用户就不能使用
this.Session.Clear();
}
else
{ //如果没有同名用户登录,就记录当前用户
CheckUserLogon.AddUserList( this.User.Identity.ToString() );
}
}


protected void Session_End(Object sender, EventArgs e)
{
CheckUserLogon.RemoveUserList ( this.User.Identity.ToString() );
}



if ( CheckUserLogon.CheckUserLogined( this.User.Identity.ToString() ) )
{ //转到另一个页面,这里提示用户已经有同名用户登录
this.Response.Redirect("aaa.aspx")
}
else
{ //如果没有同名用户登录,就记录当前用户
CheckUserLogon.AddUserList( this.User.Identity.ToString() );
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值