asp.net防止同一帐户重复登陆,查看在线人数
来源:互联网 发布:360主机卫士 sql注入 编辑:程序博客网 时间:2024/04/29 09:22
一、新建UserDal文件
namespace Dal{ public class UserDal { //获取管理员列表 public List<UserInfo> GetUserList() { string sql = "select Id,UserName,UserPassword from UserInfo"; List<UserInfo> list = new List<UserInfo>(); using (SqlDataReader dr = SQLHelper.ExecuteReader(SQLHelper.ConnectionString, CommandType.Text, sql, null)) { while(dr.Read()) { UserInfo model = new UserInfo(); model.Id = Convert.ToInt32(dr["Id"]); model.UserName = dr["UserName"].ToString(); model.UserPassword = dr["UserPassword"].ToString(); list.Add(model); } } return list; } }}
二、新建UserInfo对象
namespace Dal{ //User表对象 public class UserInfo { private int id; private string userName; private string userPassword; private string onLine; public int Id { get { return id; } set { id = value; } } public string UserName { get { return userName; } set { userName = value; } } public string UserPassword { get { return userPassword; } set { userPassword = value; } } public string OnLine { get { return onLine; } set { onLine = value; } } }}
三、新建Login.aspx
<html xmlns="http://www.w3.org/1999/xhtml" ><head runat="server"> <title>无标题页</title></head><body> <form id="form1" runat="server"> <div> 用户名:<asp:TextBox ID="txtUserName" runat="server"></asp:TextBox><Br /> 密码:<asp:TextBox ID="txtUserPassword" runat="server"></asp:TextBox><Br /> <asp:Button ID="Button1" runat="server" Text="登陆 " onclick="Button1_Click" /> </div> </form></body></html>
后台代码
using Dal;using System.Web.Caching;/*注意引用*/namespace WebOnline{ public partial class Login : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { } //登陆 protected void Button1_Click(object sender, EventArgs e) { string userName = this.txtUserName.Text.Trim(); string userPassword = this.txtUserPassword.Text.Trim(); if (userName=="张三"&& userPassword=="123") { //设置缓存(该缓存被设置为1分钟后过期) HttpRuntime.Cache.Insert("AdminName", "张三", null, DateTime.Now.AddMinutes(1), Cache.NoSlidingExpiration, CacheItemPriority.Low, null); Response.Redirect("Default.aspx"); } } }}
四、新建AdminList.aspx
<html xmlns="http://www.w3.org/1999/xhtml" ><head runat="server"> <title>无标题页</title> </head><body> <form id="form1" runat="server"> <asp:Repeater ID="rptList" runat="server"> <HeaderTemplate> <table width="20%" border="0" cellspacing="0" cellpadding="0" style="background-color:Silver"> <tr align="center"> <th>管理员ID</th> <th>管理员名称</th> <th>是否在线</th> </tr> </HeaderTemplate> <ItemTemplate> <tr> <td><%#Eval("Id")%></td> <td><%#Eval("UserName")%></td> <td><%#Eval("Online")%></td> </tr> </ItemTemplate> <FooterTemplate> </table> </FooterTemplate> </asp:Repeater> </form></body></html>
后台代码
namespace WebOnline{ public partial class AdminList : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { if (!Page.IsPostBack) { BindData(); } } private void BindData() { UserDal dal = new UserDal(); List<UserInfo> list = dal.GetUserList(); if(list!=null) { string name = HttpRuntime.Cache["AdminName"] as string; if (name != null) { for (int i = 0; i < list.Count; i++) { if (list[i].UserName == name) list[i].OnLine = "在线"; } } this.rptList.DataSource = list; this.rptList.DataBind(); } } }}
五、Default.aspx页面代码
<html xmlns="http://www.w3.org/1999/xhtml" ><head runat="server"> <title>无标题页</title> <script type="text/javascript" src="js/jquery-1.4.1.min.js"></script> <script type="text/javascript"> function test() { setInterval("ClientToServer()",10*1000);/*每隔30秒向服务器报个到,证明我还在线*/ } function ClientToServer() { $.get('Default.aspx?mytype=111&date='+new Date());/*采用jquery的post方法来提交ajax请求*/ } </script> <style type="text/css"> html body{ height:100%;} </style></head><body onload="test()"><!--打开该页面后就执行test()方法--> <form id="form1" runat="server" style="height:100%"> <table border="0" cellpadding="0" cellspacing="0" width="100%" style="background:#EBF5FC; height:100% ; vertical-align:top"> <tr style="height:60px"> <td colspan="3" style="background-color:Blue"> </td> </tr> <tr> <td id="mainLeft" valign="top" style="background:#FFF; width:185px; vertical-align:top; "> <div style="text-align:left;width:185px;font-size:12px; background-color:Gray "> <div style="height:100%"> <div style="height:100%; vertical-align:top">系统管理</div> <ul id="1" style="display:block; height:100%"> <li><a href="AdminList.aspx" target="iframe1">管理员列表</a></li> <li><a href="RoleList.aspx" target="iframe1">角色管理</a></li> </ul> </div> </div> </td><td style="width:8px; background-color:Black; vertical-align:middle"></td><td style="width:100%; height:100%;" valign="top"> <iframe frameborder="0" id="iframe1" name="iframe1" scrolling="auto" src="AdminList.aspx" style="height:100%; width:100%;"></iframe></td> </tr> <tr style="height:28px;"> <td height="28px" colspan="3" bgcolor="#EBF5FC"></td> </tr> </table></form></body></html>
后台代码
using System.Web.Caching;namespace WebOnline{ public partial class _Default : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { if (!Page.IsPostBack) { if (Request["mytype"] != null && Request["mytype"] == "111") { GetClientMessage(); } } } //对客户端传来的报到做相应处理 private void GetClientMessage() { //重置缓存(该缓存被设置为1分钟后过期) HttpRuntime.Cache.Insert("AdminName", "张三", null, DateTime.Now.AddMinutes(1), Cache.NoSlidingExpiration, CacheItemPriority.Low, null); } }}
六、项目结构图和数据表结构图
七、登陆--->Defalut.aspx页--->再单独打开AdminList.aspx页
八、说明
当关闭Default.aspx页面后,就不会有ajax向服务器报到的代码的执行,而服务器端的缓存设置了一分钟后过期,所以没有ajax提交报到来重置服务端的缓存,那么缓存一分钟后就失效了。所以当关闭Default.aspx页面过了一分钟后,再打开AdminList.aspx页面,则张三不在线了。
此方法适合像本例Default.aspx这种页面结构的并且是统计人员不多的情况下的应用程序。如果人数有几千上万,则客户端每隔30秒就是向服务端提交几千上万的请求,对服务器压力大。所以还是适合这种查看一个系统的管理是否在线或者禁止同一管理员重复登陆(在登陆进从缓存取出来判断)这样的场景,因为一个系统的管理员也就那么些人
- asp.net防止同一帐户重复登陆,查看在线人数
- ASP.NET 防止同一帐户同时登陆
- 如何防止同一帐户重复登录系统(ASP.net)
- 如何防止同一帐户重复登录系统(ASP.net)2
- ASP.NET 防止同一用户同时登陆
- 如何防止同一帐户重复登录系统
- 如何防止同一帐户重复登录系统
- 如何防止同一帐户重复登录系统
- 如何防止同一帐户重复登录系统
- 如何防止同一帐户重复登录系统
- 利用cache防止同一帐户重复登录
- 用asp.net显示在线登陆人数及位置
- [推荐]用asp.net显示在线登陆人数及位置
- 用asp.net显示在线登陆人数及位置
- 用asp.net显示在线登陆人数及位置
- asp.net 2.0防止同一用户同时登陆
- asp.net 2.0防止同一用户同时登陆
- ASP.NET 2.0防止同一用户同时登陆
- 搜索Collections元素,用DateFormatSymbols 获得月份
- RAC 修改 ASM实例名 的步骤
- vs2010中的ipch文件夹和sdf文件
- HTML5 画一个正方形
- ASM 实例 ORA-15063 ORA-15186 ASMLIB error function = [asm_open], error = [1], mesg = [Operation not pe
- asp.net防止同一帐户重复登陆,查看在线人数
- iphone学习笔记-UIView如何管理它的子视图
- 按自定义协议格式生成二进制字节数组的一种方式
- 游戏发展史上十大经典之作
- Sql语句命令大全
- 无法初始化链接服务器 "(null)" 的 OLE DB 访问接口 "Microsoft.Jet.OLEDB.4.0" 的数据源对象
- .NET Foundations – .NET assembly structure
- 从瀑布模型、极限编程到敏捷开发
- 程序员一夜暴富之前的漫漫长路