/*******************************************************************************
* 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 *************************************************************/
ASP.NET 实现单点登录
最新推荐文章于 2021-05-05 15:39:11 发布