您的位置:首页 > 编程语言 > ASP

ASP.NET用户重复登录控制

2011-10-26 00:20 232 查看
在使用ASP.NET进行Web开发时关于如何去掉用户重复登录,实现过程如下:

1、首先,对web.config配置如下:

<configuration>

<system.web>

<compilation debug="true" targetFramework="4.0">

<assemblies>

<add assembly="System.Web.Extensions.Design, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>

<add assembly="System.Design, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"/>

<add assembly="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/></assemblies></compilation>

<customErrors defaultRedirect="~/ErrorPage.htm" mode="Off">

<error statusCode="404" redirect="~/FileNotFind.aspx"></error>

</customErrors>

<authentication mode="Forms">

<forms loginUrl="default.aspx"></forms>

</authentication>

<authorization>

<allow users="*" />

</authorization>

<globalization requestEncoding="gb2312" responseEncoding="gb2312" />

<sessionState mode="InProc" cookieless="true" timeout="5"></sessionState>

<!--为了启用页面跟踪,我们先启用每一页的trace,以便我们方便的调试,如下。-->

<trace enabled="true" requestLimit="1000" pageOutput="true" traceMode="SortByTime" localOnly="true"/>

</system.web>

</configuration>

2、使用Global.asax全局控制文件,实现将登录的用户存储在application对象中,代码如下:

<%@ Application Language="C#" %>

<script runat="server">

void Application_Start(object sender, EventArgs e)

{

//在应用程序启动时运行的代码

if (Application["online"] == null)

{

Hashtable h = new Hashtable();

Application["online"] = h;

}

}

void Application_End(object sender, EventArgs e)

{

//在应用程序关闭时运行的代码

}

void Application_Error(object sender, EventArgs e)

{

//在出现未处理的错误时运行的代码

}

void Session_Start(object sender, EventArgs e)

{

//在新会话启动时运行的代码

}

void Session_End(object sender, EventArgs e)

{

//在会话结束时运行的代码。

// 注意: 只有在 Web.config 文件中的 sessionstate 模式设置为

// InProc 时,才会引发 Session_End 事件。如果会话模式

//设置为 StateServer 或 SQLServer,则不会引发该事件。

LogoutCache();

}

/// <summary>/// 清除Cache里当前的用户,主要在Global.asax的Session_End方法和用户注销的方法里调用

/// </summary>

public void LogoutCache()

{

Hashtable h = (Hashtable)Application["online"];

if(h!=null)

{

if(h[Session.SessionID]!=null)

h.Remove(Session.SessionID);

Application["online"] = h;

}

}

</script>

3、用户登录界面,登录用能的实现:

//获取application系统对象中存储的在线用户

Hashtable h = (Hashtable)Application["online"];

string oldsessionid = null;

if (h != null )

{

IDictionaryEnumerator e1 = h.GetEnumerator();

bool flag = false;

while (e1.MoveNext())

{

//判断当前登录用户时候存在于application对象中

if (((string)((ArrayList)e1.Value)[0]).Equals(name))

{

flag = true;

oldsessionid = e1.Key.ToString();

break;

}

}

if (flag)

{

//获取用户成功登录时间到目前现在时间差

TimeSpan ts = System.DateTime.Now.Subtract(Convert.ToDateTime(((ArrayList)e1.Value)[1]));

if (ts.TotalSeconds < 300)

{

//ClientScript.RegisterClientScriptBlock(this.GetType(), "error", "<script> alert('对不起,你输入的账户正在被使用中,如果你是这个账户的真正主人,请在下次登陆时及时的更改你的密码,因为你的密码极有可能被盗窃了!');</script>");

HttpSessionState sessionstate = (HttpSessionState)((ArrayList)e1.Value)[2];

//sessionstate.Clear();

sessionstate.Abandon();

try

{

throw new Exception("你的帐号已在别处登陆,你被强迫下线!");

}

catch (Exception)

{

}

finally

{

Response.Redirect("~/");

}

}

h.Remove(e1.Key);

}

}

else

{

h = new Hashtable();

}

ArrayList al = new ArrayList();

al.Add(name); //当前登录的用户名

al.Add(System.DateTime.Now);//登录的时间

al.Add(HttpContext.Current.Session);//当前会话

h[Session.SessionID] = al;

Application["online"] = h;//将当前登录用户信息存入application中

Response.Redirect("~/LoginSuccess.aspx");

如上只是部分代码,如果想下载全部代码,请到我的下载空间进行下载,谢谢大家支持!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: