本例完成的功能就是防止用户重复登录!若用户已经登录,则当其再次登录时,弹出提示框后返回!
实现思路:用户登录成功后,将用户登录信息存放到 Hashtable类型的Application["Online"]里面,其键值为SessionID,其Value值为用户ID;当用户注销时 ,调用Session.Abandon;在Global.asax里面的 SessionEnd事件中,将用户ID从Hashtable中删除;在用户访问页面时,察看Hashtable中是否有对应的用户ID如果没有则判断用户不在线(用户不在线的原因可能是按了注销按钮、网页超时等)
//1、公用类中判断用户是否在线的函数(供用户调用)
/// <summary>
/// 判断用户strUserID是否包含在Hashtable h中
/// </summary>
/// <param name="strUserID"></param>
/// <param name="h"></param>
/// <returns></returns>
public static bool AmIOnline(string strUserID,Hashtable h)
{
if(strUserID == null)
return false;
//继续判断是否该用户已经登陆
if(h == null)
return false;
//判断哈希表中是否有该用户
IDictionaryEnumerator e1 = h.GetEnumerator();
bool flag = false;
while(e1.MoveNext())
{
if(e1.Value.ToString().CompareTo(strUserID) == 0)
{
flag = true;
break;
}
}
return flag;
}
//2、用户登录事件处理:
private void btnlogin_Click(object sender, System.Web.UI.ImageClickEventArgs e)
{ ////User为自定义的类,其中包含Login方法
User CurUser = new User();
CurUser.UserID = this.username.Text.Trim();
if(MyUtility.AmIOnline(CurUser.UserID, (Hashtable)Application["Online"]))
{
JScript.Alert("您所使用的登录ID已经在线了!您不能重复登录!");
return;
}
CurUser.LoginPsw = FormsAuthentication.HashPasswordForStoringInConfigFile(this.password.Text.Trim(),"SHA1");
int ii = CurUser.Login();
StringBuilder sbPmt = new StringBuilder();
switch(ii)
{
case 0: //如果登录成功,则将UserID加入Application["Online"]中
Hashtable h = (Hashtable)Application["Online"];
if(h == null)
h = new Hashtable();
h[Session.SessionID] = CurUser.UserID;
Application["Online"] = h;
Session["UserID"] = CurUser.UserID;
Session["UserNM"] = CurUser.UserNM;
Session["RoleMap"] = CurUser.RoleMap;
Session["LoginPsw"] = CurUser.LoginPsw;
Session["LoginTime"] = DateTime.Now;
Response.Redirect("ChooseRole.aspx");
break;
case -1:
JScript.Alert("用户名错误!");
break;
case -2:
JScript.Alert("密码错误!");
break;
default:
sbPmt.Append("登录过程中发生未知错误!");
JScript.Alert(sbPmt.ToString());
break;
}
return;
}
//3、在Global.asax中的Session_End事件:
protected void Session_End(Object sender, EventArgs e)
{
Hashtable h=(Hashtable)Application["Online"];
if(h[Session.SessionID]!=null)
h.Remove(Session.SessionID);
Application["Online"]=h;
}
//4、在每一个页面需要刷新的地方,调用如下代码:
try
{
if(!common.MyUtility.AmIOnline(Session["UserID"].ToString(),(Hashtable)Application["OnLine"]))
{
//用户没有在线 ,转到登录界面
Response.Write("<script>parent.document.location.href='Login.aspx';</script>"); ////有框架时用
//Response.Redirect("login.aspx"); ////无框架时用
return;
}
}
catch
{
//会话过期 ,转到登录界面
Response.Write("<script>parent.document.location.href='Login.aspx';</script>"); ////有框架时所用
//Response.Redirect("login.aspx"); ////无框架时用
return;
}
深入思考:
由本例的解决方法可以加以延伸,比如,在存储 UserID的时候,将UserID+客户端IP地址一起存进去,则在将相应信息取出来分析的时候,可以做到:当用户在不同的计算机上先后登录的时候,则允许最近一 次的登录,而将之前的登录删除!等等等等
--这个里面是具体的详细信息
相关推荐
Struts的Token机制是Web应用中防止表单重复提交的一种常用方法。在处理表单提交时,如果用户意外地多次点击了提交按钮,可能会导致数据的重复录入,从而引起不必要的问题,例如订单重复、数据库数据异常等。为了解决...
优雅处理重复点击不仅意味着防止不必要的操作,还应确保用户体验不受影响,避免按钮在处理过程中被冻结,或者响应速度过慢。这通常涉及到以下几个关键点: 1. **禁用按钮**:当用户点击按钮后,立即禁用该按钮,以...
同时,它可能还具备防止重复申请的机制,以保护用户账户安全。 对于“助手稳定版”这个文件,我们可以推测这是经过开发者优化过的版本,减少了软件运行时的错误,提高了申请的成功率。稳定版通常意味着软件已经过多...
QQ空间说说批量转载工具是一款专门针对QQ空间设计的应用软件,其主要目的是帮助用户快速、大量地转载QQ空间中的说说内容。油腻QQ空间说说批量转载工具 v1.0 版本是这个软件的一个特定迭代,可能包含了优化的性能和新...
- **参数化测试**:利用参数化功能来支持不同用户登录等场景。 - **验证点设置**:定义测试中的验证点,确保关键功能按预期工作。 #### QTP中的Action作用 Action在QTP中主要用于组织测试脚本,支持复用和维护。它...
【RPA之家】提供的【RPA之家转载AA视频教程】36.PDF.rar是一个关于RPA(Robotic Process Automation)的教育资源,特别是聚焦于Automation Anywhere这个RPA平台的使用。RPA是一种技术,它允许自动化重复性、规则驱动...
Ruby on Rails,简称Rails,是基于Ruby编程语言的一款开源Web应用程序框架,以其“Convention over Configuration”(约定优于配置)的设计哲学和“Don't Repeat Yourself”(不要重复自己,DRY)的原则著称,极大地...
这样可以减少单一页面上的内容重复,同时可能提高用户的浏览体验,因为用户可以选择只阅读他们感兴趣的部分。然而,这种方法可能导致用户需要多次点击才能获取完整信息,对页面Title的优化也存在潜在问题,因为相同...
RPA是一种自动化技术,它允许软件机器人模仿人类在应用软件中的交互,以执行重复性的业务流程。UiPath是目前市场上广泛应用的RPA工具之一,因其用户友好性和强大的自动化能力而受到赞誉。 正则表达式(Regular ...
使用手册中明确指出了对操作系统的具体版本要求,并提醒用户避免擅自复印或转载使用说明书的内容,以防止因版本更新导致的内容不符。 使用前的注意事项中提到了关于保修和免责声明的内容。EPSON公司为购买其机器人...
3. **设置Loop**:在Enterprise A2019中,用户可以通过图形化界面轻松添加Loop组件。选择Loop动作,然后配置其属性,包括循环次数(如果为固定次数)或终止条件(如果为条件循环)。 4. **嵌套Loop**:有时,一个...
首先,RPA的核心在于它可以自动化那些重复性高、规则明确的任务,如数据录入、表单填写、文件管理等,这些工作往往占用了员工大量时间,而RPA机器人则能高效、准确地执行这些任务。 RPA的工作原理是通过记录和理解...
通过海明距离的计算,可以设置阈值来判断网页是否重复或转载,从而进行消重处理。 在云计算环境下,对藏文网页的特征结构进行文档摘要提取,计算信息指纹并转换成固定位数的二进制数值,有助于计算海明距离和相似度...
- 使用`<noscript>`标签:当引用或转载内容时,可以通过添加`<noscript>`标签阻止搜索引擎抓取这部分内容,或者使用`rel="nofollow"`属性,防止搜索引擎追踪链接,降低被误判的风险。 - 引用和注释:在转载内容时...
1. **个人博客**:博主们可以通过使用此插件来保护自己的创作成果,防止辛苦写就的文章被他人随意转载。 2. **企业网站**:公司网站往往包含大量产品介绍和技术文档等内容,利用插件的加密和权限控制功能可以有效...
添加`noindex`或`nofollow`标签可以指示搜索引擎不要索引这些页面,以防止被视为复制内容。同时,确保注明来源,尊重原创作者的权益,有助于维护良好的网络环境。 7. **原创内容的重要性**: - 对于任何网站,尤其...
防止内容被吸血(盗链)。 ? 阻断特定主机、反向链接或者烦人的搜索机器人。 ? 内容商议:向不同的语言用户或者不同的浏览器用户提供不同的文件。示例 ? 为群集式服务器架构模拟负载均衡。 定价资料 ? 45天的试用期...
未经许可,禁止传播、转载和发表 **作者:** 戴志康、王海波 **最后更新日期:** 2006年2月26日 #### 2. 适用范围 如无特殊说明,以下规则要求完全适用于Discuz!项目,同时也适用于Comsenz旗下其他PHP项目。 ##...