`

防止用户重复登录!(转载)

 
阅读更多

本例完成的功能就是防止用户重复登录!若用户已经登录,则当其再次登录时,弹出提示框后返回!

实现思路:用户登录成功后,将用户登录信息存放到 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地址一起存进去,则在将相应信息取出来分析的时候,可以做到:当用户在不同的计算机上先后登录的时候,则允许最近一 次的登录,而将之前的登录删除!等等等等


--这个里面是具体的详细信息

http://www.cnblogs.com/panshuiqing/articles/951779.html

分享到:
评论

相关推荐

    用STRUTS的TOKEN机制解决表单重复提交,转载自:百度文库

    Struts的Token机制是Web应用中防止表单重复提交的一种常用方法。在处理表单提交时,如果用户意外地多次点击了提交按钮,可能会导致数据的重复录入,从而引起不必要的问题,例如订单重复、数据库数据异常等。为了解决...

    优雅的处理重复点击代码

    优雅处理重复点击不仅意味着防止不必要的操作,还应确保用户体验不受影响,避免按钮在处理过程中被冻结,或者响应速度过慢。这通常涉及到以下几个关键点: 1. **禁用按钮**:当用户点击按钮后,立即禁用该按钮,以...

    京东试用助手(转载)

    同时,它可能还具备防止重复申请的机制,以保护用户账户安全。 对于“助手稳定版”这个文件,我们可以推测这是经过开发者优化过的版本,减少了软件运行时的错误,提高了申请的成功率。稳定版通常意味着软件已经过多...

    QQ空间说说批量转载工具 油腻QQ空间说说批量转载工具 v1.0

    QQ空间说说批量转载工具是一款专门针对QQ空间设计的应用软件,其主要目的是帮助用户快速、大量地转载QQ空间中的说说内容。油腻QQ空间说说批量转载工具 v1.0 版本是这个软件的一个特定迭代,可能包含了优化的性能和新...

    转载软件测试试题

    - **参数化测试**:利用参数化功能来支持不同用户登录等场景。 - **验证点设置**:定义测试中的验证点,确保关键功能按预期工作。 #### QTP中的Action作用 Action在QTP中主要用于组织测试脚本,支持复用和维护。它...

    【RPA之家转载AA视频教程】36.PDF.rar

    【RPA之家】提供的【RPA之家转载AA视频教程】36.PDF.rar是一个关于RPA(Robotic Process Automation)的教育资源,特别是聚焦于Automation Anywhere这个RPA平台的使用。RPA是一种技术,它允许自动化重复性、规则驱动...

    ruby on rails, 非常棒的启蒙教材(转载)

    Ruby on Rails,简称Rails,是基于Ruby编程语言的一款开源Web应用程序框架,以其“Convention over Configuration”(约定优于配置)的设计哲学和“Don't Repeat Yourself”(不要重复自己,DRY)的原则著称,极大地...

    降低网站页面的相似度.pdf

    这样可以减少单一页面上的内容重复,同时可能提高用户的浏览体验,因为用户可以选择只阅读他们感兴趣的部分。然而,这种方法可能导致用户需要多次点击才能获取完整信息,对页面Title的优化也存在潜在问题,因为相同...

    【RPA之家转载视频教程6】在UiPath中学习正则表达式有助于数据提取--uipathellerners.com网站-RPA公司.rar

    RPA是一种自动化技术,它允许软件机器人模仿人类在应用软件中的交互,以执行重复性的业务流程。UiPath是目前市场上广泛应用的RPA工具之一,因其用户友好性和强大的自动化能力而受到赞誉。 正则表达式(Regular ...

    EPSON 机器人控制器RC700

    使用手册中明确指出了对操作系统的具体版本要求,并提醒用户避免擅自复印或转载使用说明书的内容,以防止因版本更新导致的内容不符。 使用前的注意事项中提到了关于保修和免责声明的内容。EPSON公司为购买其机器人...

    【RPA之家转载AA视频教程】29.How .rar

    3. **设置Loop**:在Enterprise A2019中,用户可以通过图形化界面轻松添加Loop组件。选择Loop动作,然后配置其属性,包括循环次数(如果为固定次数)或终止条件(如果为条件循环)。 4. **嵌套Loop**:有时,一个...

    【RPA之家转载视频教程2】5分钟内的RPA-什么是RPA-机器人过程自动化-RPA解释-简单学习.rar

    首先,RPA的核心在于它可以自动化那些重复性高、规则明确的任务,如数据录入、表单填写、文件管理等,这些工作往往占用了员工大量时间,而RPA机器人则能高效、准确地执行这些任务。 RPA的工作原理是通过记录和理解...

    云计算环境中的计算机网络安全 (3).pdf

    通过海明距离的计算,可以设置阈值来判断网页是否重复或转载,从而进行消重处理。 在云计算环境下,对藏文网页的特征结构进行文档摘要提取,计算信息指纹并转换成固定位数的二进制数值,有助于计算海明距离和相似度...

    在SEO中如何正确判断复制内容.docx

    - 使用`&lt;noscript&gt;`标签:当引用或转载内容时,可以通过添加`&lt;noscript&gt;`标签阻止搜索引擎抓取这部分内容,或者使用`rel="nofollow"`属性,防止搜索引擎追踪链接,降低被误判的风险。 - 引用和注释:在转载内容时...

    wordpress articles protection插件

    1. **个人博客**:博主们可以通过使用此插件来保护自己的创作成果,防止辛苦写就的文章被他人随意转载。 2. **企业网站**:公司网站往往包含大量产品介绍和技术文档等内容,利用插件的加密和权限控制功能可以有效...

    在SEO中如何正确判断复制内容.pdf

    添加`noindex`或`nofollow`标签可以指示搜索引擎不要索引这些页面,以防止被视为复制内容。同时,确保注明来源,尊重原创作者的权益,有助于维护良好的网络环境。 7. **原创内容的重要性**: - 对于任何网站,尤其...

    IIS服务器SSI(rewrite重写)插件的帮助资料

    防止内容被吸血(盗链)。 ? 阻断特定主机、反向链接或者烦人的搜索机器人。 ? 内容商议:向不同的语言用户或者不同的浏览器用户提供不同的文件。示例 ? 为群集式服务器架构模拟负载均衡。 定价资料 ? 45天的试用期...

    dz编码规范(PHP)

    未经许可,禁止传播、转载和发表 **作者:** 戴志康、王海波 **最后更新日期:** 2006年2月26日 #### 2. 适用范围 如无特殊说明,以下规则要求完全适用于Discuz!项目,同时也适用于Comsenz旗下其他PHP项目。 ##...

Global site tag (gtag.js) - Google Analytics