实现方式,用户登录的时候记录用Session他的ID和登录时间。然后写入一个XML文件。以他的用户名命名,内容写入他的登录时间。登录后每个页面每20秒用Session的登录时间去比对写入的文件。如果正确则不用理会 如果不正确则被被踢出。因为写入的文件如果不是同一用户名登录的话是不会更新的。 代码可以实现 用户单一登录 单点登录 无限人次登录 。稍微修改就可以实现了。 login 页面 <%@ Page Language="C#" AutoEventWireup="true" CodeFile="login.aspx.cs" Inherits="login" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" > <head runat="server"> <title>无标题页</title> </head> <body> <form id="form1" runat="server"> <div> <div> <asp:TextBox ID="txtUser" runat="server"></asp:TextBox> <asp:Button ID="Button1" runat="server" On </div>
</div> </form> </body> </html> login 代码 using System; using System.Da using System.Configuration; using System.Collections; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Web.UI.HtmlControls; 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 strUserId = txtUser.Text; string times = DateTime.Now.ToString("yyyyMMddHHmmss"); string body = CourseXMLFileHeader + "<userTime>" + times + "</userTime></NewDataSet>"; string CourseFilePath =Server.MapPath(".") + "file://userlist//" + strUserId + ".XML"; if (!System.IO.File.Exists(CourseFilePath)) { System.IO.FileStream NewText = System.IO.File.Create(CourseFilePath); NewText.Close(); Session["SESSION_USERTIME"] = times; Session["SESSION_USERName"] = strUserId;
} else { System.IO.File.Delete(CourseFilePath); System.IO.FileStream NewText = System.IO.File.Create(CourseFilePath); NewText.Close(); Session["SESSION_USERTIME"] = times; Session["SESSION_USERName"] = strUserId; } System.IO.StreamWriter sw = new System.IO.StreamWriter(CourseFilePath, true); body = body.Replace("\'", "\""); sw.WriteLine(body); sw.Close();
Response.Redirect("Default.aspx"); } public String CourseXMLFileHeader = @"<?xml version='1.0' standalone='yes'?><NewDataSet>";
} default 页面 <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" > <head id="Head1" runat="server"> <title></title>
</head> <body> <form id="form1" runat="server"> <asp:GridView ID="DataList1" runat="server"> </asp:GridView> </form> </body> </html> <script type="text/javas var x=0; function myRefresh() { xRequest(); var result = "";
xmlHttp.open("Post", "test.aspx", false); xmlHttp.send(""); result = xmlHttp.responseText; if(result!="ok") { alert("sorry,您的账号在别处登录"); location.href='logost.aspx'; }
x++; if(x<20) { setTimeout("myRefresh()",20*1000); } } myRefresh();
var xmlHttp; function xRequest(){ if(window.XMLHttpRequest){ xmlHttp = new XMLHttpRequest(); //火狐浏览器。 } else if(window.ActiveXObject){ xmlHttp = new ActiveXObject("Msxml2.XMLHTTP"); //IE浏览器。 if(!xmlHttp){xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");} } }
</script> 代码 using System; using System.Da using System.Configuration; using System.Collections; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Web.UI.HtmlControls; using System.IO; public partial class _Default : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { DirectoryInfo di = new DirectoryInfo(Server.MapPath(".") + "file://userlist//"); FileSystemInfo[] dis = di.GetFileSystemInfos(); if (dis.Length < 1) { Response.Write("<script>alert(\"目录是空的\");</script>"); } else { foreach (FileSystemInfo fitemp in dis) { Response.Write(fitemp.Name + "<br>"); } } } } Test.aspx 这个页面是用来检查是否被顶 只要写代码就可以了 using System; using System.Da using System.Configuration; using System.Collections; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Web.UI.HtmlControls; using System.IO; using System.Xml; public partial class test : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { string times = Session["SESSION_USERTIME"].ToString(); string userid= Session["SESSION_USERName"].ToString(); string CourseFilePath = Server.MapPath(".") + "file://userlist//" + userid + ".XML"; if (times.Equals(ReadXmlReturnNode(CourseFilePath, "userTime"))) { this.Response.Write("ok"); this.Response.End(); } else { this.Response.Write("no"); this.Response.End(); }
} public static string ReadXmlReturnNode(string XmlPath, string Node) { XmlDocument docXml = new XmlDocument(); docXml.Load(@XmlPath); XmlNodeList xn = docXml.GetElementsByTagName(Node); return xn.Item(0).InnerText.ToString(); } } 退出界面 logost .aspx using System; using System.Da using System.Configuration; using System.Collections; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Web.UI.HtmlControls; public partial class logost : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { Session.Remove("SESSION_USERTIME"); Session.Remove("SESSION_USERName"); Response.Redirect("login.aspx"); } } |