ASP.NET 实现单点登录

/*******************************************************************************
* Create Aothor: 关彦明
* Create Date:	 2011-12-14
* Description:	 #在同一应用程序中实现用户单点登录#
*				 同一用户在登录有效期内不能多次登录;
*				 同一个用户,登录上线后,自动踢出前一个用户,使其自动下线。
********************************************************************************/

处理共三处
一 登录时设置值:
	//用户ID
	string strUserId = "用户ID值";
	//设置用户ID
    Session["userSingleLoginId"] = strUserId;
    //用户ID加上时间  计算出唯一的MD5值来。
    string strTmpCode = DateTime.Now.ToFileTime() + strUserId;
	//调用生成MD5的方法。
    strTmpCode = C_MyEncryption.GetMD5(strTmpCode);
    //本次会话session中的唯一值
    Session["userSingleLoginCode"] = strTmpCode;
    //Application 里存放全局的唯一值。
    Application["userSingleLoginCode" + strUserId] = strTmpCode;
    //登录成功 
	//成功后跳转页面
	//

二 判断
	我们来建一个 ValidatePage类,继承自System.Web.UI.Page,重载了 OnLoad方法,所有要验证Session权限的页面均继承自该类,
	这样请求页面时就统一在这里做判断:
	protected override void OnLoad(EventArgs e)
    {
        //验证用户登录信息
        //session里存入用户唯一值的键:userSingleLoginCode
        //Application里存的用户唯一值的键:userSingleLoginCode + 用户ID(从session["userSingleLoginId"]里取)
        //比较这两个值,如不一样说明该用户已在其他地方登录。
        //如这两个值不存在,说明是session过期了,让用户重新登录。
        if (Session["userSingleLoginId"] == null || Session["userSingleLoginCode"] == null || Application["userSingleLoginCode" + Session["userSingleLoginId"].ToString()] == null)
        {
            Response.Clear();
            Response.Write("<script>window.location.href=\"../../../Login.aspx\";</script>");
            Response.End();
        }
        string strSessionUserSingleLoginCode = Session["userSingleLoginCode"].ToString();
        string strApplicationUserSingleLoginCode = Application["userSingleLoginCode" + Session["userSingleLoginId"].ToString()].ToString();
        if (strSessionUserSingleLoginCode != strApplicationUserSingleLoginCode)
        {
            //该用户已在其他地方登录。
            Response.Clear();
            Response.Write("<script>alert(\"该用户已在其他地方登录。\");window.location.href=\"../../../Login.aspx\";</script>");
            Response.End();
        }
        base.OnLoad(e);
    }
三 用户退出或Session失效时 释放资源
	在Globl.asax.cs的Session_End方法里清空Application里该用户的值,释放资源:
	protected void Session_End(object sender, EventArgs e)
    {
        //用户ID在,就清空Session和Application里有值。
        if (Session["userSingleLoginId"] == null)
        {
            Application["userSingleLoginCode" + Session["userSingleLoginId"].ToString()] = null;
            Session["userSingleLoginCode"] = null;
            Session["userSingleLoginId"] = null;
        }
        Session.Abandon();
    }

/******************************************* end *************************************************************/

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值