单点登陆(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() );
}
彼此访问无需要再次登陆!
大多都是用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() );
}