面试紧急求助--怎么防止多处登陆
就是网站同时只能有用户在一个机器登陆,如果他在其他机器登陆就提示该帐号已经使用,或者把哪个已经登陆的帐号踢下。
[解决办法]
将用户登录号,ip记录在application中.登录时检查.
[解决办法]
不知道同时检查IP+Account行不行。
[解决办法]
数据库表中 应该设置IP这样的字段
登录时候 先判断是否为这个IP
如果不是更新对于User的 这个IP为登录ip
[解决办法]
方法多多 单一登录 问题
[解决办法]
登录时插入到库里Session的id值+时间
[解决办法]
我用的是在数据库中有一个用户名,用来记录用户的上线信息。用户上线时先判断此表是否有此人,如果有,就提示它有人登录,五分钟后登录,这时,你就把此表中的此用户删除掉。
你在每一个页面中都要判断此用户表中的用户是否为空。如果为空就踢掉它
[解决办法]
用户在局渔网 ip一样怎么办==================> 那就不能按ip来分. 不管ip,只要application存在这个登录号,就剔除它.
[解决办法]
可以再取 用户的机器名 用于判别
试试
public static string getUserHostName()
{
return HttpContext.Current.Server.MachineName.ToString();
}
[解决办法]
听墓白兄的话
[解决办法]
剔除怎么搞?定期刷新?=====> 可以将用户的session保存在application中.直接操作那个sessionapplication[ "User1 "] = Session;
[解决办法]
不需要操作客户端,让session过期就可.
[解决办法]
session.Settimeout = 1
1分钟失效
[解决办法]
把用户的登录信息保存在Cache中,并设置过期时间为Session失效的时间,因此,一旦Session失效,我们的Cache也过期
[解决办法]
session[ " "]=null
[解决办法]
cpp2017(慕白兄) ( ) 信誉:100 Blog 2007-4-2 16:25:17 得分: 0
将用户登录号,ip记录在application中.登录时检查.
正解
[解决办法]
把当前用户的session置空..
[解决办法]
string sUser = Convert.ToString(Cache[sKey]);
// 检查是否存在
if (sUser == null || sUser == String.Empty)
{
TimeSpan SessTimeOut = new TimeSpan(0,0,System.Web.HttpContext.Current.Session.Timeout,0,0);
HttpContext.Current.Cache.Insert(sKey,sKey,null,DateTime.MaxValue,SessTimeOut,
System.Web.Caching.CacheItemPriority.NotRemovable,null);
Session[ "User "] = sKey;
// 首次登录 }
else
{
Response.write( "抱歉,您好像已经登录了呀 ");
}
[解决办法]
我汗,上面一堆星星说IP。
进程内Cookie,或者直接用Session,也没必要往Session里面赋值,直接做个SessionID与用户名对应的Hashtable,每一次检查一下SessionID和用户名是否匹配就完了。每一次由用户登录,就把SessionID和用户名放到这个Hashtable中,如果用户在别处登陆,那么新写入的数据就会覆盖原来的数据,自然就把原来的用户给踢掉了……
真的是服了……
[解决办法]
前几天刚开发一个,和Ivony想法一样的,
顶一个先
------解决方案--------------------
每次页面请求时,在这个事件判断就可以了
void application_PostAuthenticateRequest(object sender, EventArgs e)
{
.....
}
[解决办法]
up
[解决办法]
mark
[解决办法]
使用Session 可以做到
[解决办法]
我将孟子的一篇文章发一下,你看一下。。希望对你有帮助。。
由于某些原因,在我们的应用中会遇到一个用户只能在一个地方登录的情况,也就是我们通常所说的单点登录。在ASP.NET中实现单点登录其实很简单,下面就把主要的方法和全部代码进行分析。
实现思路
利用Cache的功能,我们把用户的登录信息保存在Cache中,并设置过期时间为Session失效的时间,因此,一旦Session失效,我们的Cache也过期;而Cache对所有的用户都可以访问,因此,用它保存用户信息比数据库来得方便。
查看示例
SingleLogin.aspx代码
<%@ Page language= "c# " Codebehind= "SingleLogin.aspx.cs " AutoEventWireup= "false "
Inherits= "eMeng.Exam.SingleLogin " %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN " >
<HTML>
<HEAD>
<title> 单点登录测试 </title>
<meta http-equiv= "Content-Type " content= "text/html; charset=gb2312 ">
<meta http-equiv= "Author " content= "孟子E章 ">
<meta http-equiv= "WebSite " content= "http://dotnet.aspx.cc/ ">
<style>
H3 { FONT: 17px 宋体 }
INPUT { FONT: 12px 宋体 }
SPAN { FONT: 12px 宋体 }
P { FONT: 12px 宋体 }
H4 { FONT: 12px 宋体 }
</style>
</HEAD>
<body MS_POSITIONING= "GridLayout ">
<form id= "Form1 " method= "post " runat= "server ">
<div align= "center ">
<h3> 单点登录测试 </h3>
<p> 用户名称: <asp:TextBox id= "UserName " runat= "server "> </asp:TextBox> </p>
<p> 用户密码: <asp:TextBox id= "PassWord " runat= "server " TextMode= "Password "> </asp:TextBox> </p>
<p> <asp:Button id= "Login " runat= "server " Text= " 登 录 "> </asp:Button> </p>
<p> <asp:Label id= "Msg " runat= "server "> </asp:Label> </p>
</div>
</form>
</body>
</HTML>
SingleLogin.aspx.cs代码
using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
namespace eMeng.Exam
{
/// <summary>
/// SingleLogin 的摘要说明。
/// 实现单点登录
/// </summary>
public class SingleLogin : System.Web.UI.Page
{
protected System.Web.UI.WebControls.TextBox UserName;
protected System.Web.UI.WebControls.TextBox PassWord;
protected System.Web.UI.WebControls.Label Msg;
protected System.Web.UI.WebControls.Button Login;
private void Page_Load(object sender, System.EventArgs e)
{
// 实际例子可访问:
// http://dotnet.aspx.cc/Exam/SingleLogin.aspx
}
#region Web 窗体设计器生成的代码
override protected void OnInit(EventArgs e)
{
InitializeComponent();
base.OnInit(e);
}
/// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.Login.Click += new System.EventHandler(this.Login_Click);
this.Load += new System.EventHandler(this.Page_Load);
}
#endregion
private void Login_Click(object sender, System.EventArgs e)
{
// 作为唯一标识的Key,应该是唯一的,这可根据需要自己设定规则。
// 做为测试,这里用用户名和密码的组合来做标识;也不进行其它的错误检查。
// 生成Key
string sKey = UserName.Text + "_ " + PassWord.Text;
// 得到Cache中的给定Key的值
string sUser = Convert.ToString(Cache[sKey]);
// 检查是否存在
if (sUser == null || sUser == String.Empty)
{
// Cache中没有该Key的项目,表名用户没有登录,或者已经登录超时
// 注意下面使用的TimeSpan构造函数重载版本的方法,是进行是否登录判断的关键。
TimeSpan SessTimeOut = new TimeSpan(0,0,System.Web.HttpContext.Current.Session.Timeout,0,0);
HttpContext.Current.Cache.Insert(sKey,sKey,null,DateTime.MaxValue,SessTimeOut,
System.Web.Caching.CacheItemPriority.NotRemovable,null);
Session[ "User "] = sKey;
// 首次登录,您可以做您想做的工作了。
Msg.Text= " <h4 style= 'color:red '> 嗨!欢迎您访问 <a href= 'http://dotnet.aspx.cc/ '> 【孟宪会之精彩世界】 ";
Msg.Text += " </a> ,祝您浏览愉快!:) </h4> ";
}
else
{
// 在 Cache 中发现该用户的记录,表名已经登录过,禁止再次登录
Msg.Text= " <h4 style= 'color:red '> 抱歉,您好像已经登录了呀:-( </h4> ";
return;
}
}
}
}
[解决办法]
up
[解决办法]
-->
[解决办法]
UP
[解决办法]
mark
[解决办法]
Application里存入登录用户名,当再次有用户登录时,判断Application里是否已经有此用户了
[解决办法]
好像Application的说的挺有道理
[解决办法]
在数据库中建立一个用户ID与SessionID的对应关系表,一个ID只能对一个,每个用记登陆时判断登陆用户的ID在数据库中对应的SessionID与当前的SessionID是否一致
[解决办法]
up
[解决办法]
学习ing 。。。
[解决办法]
// 生成Key
string sKey = UserName.Text + "_ " + PassWord.Text;
// 得到Cache中的给定Key的值
//string sUser = Convert.ToString(Cache[sKey]); //这个地方转换会出错的了哦!
应该这样才对
// 检查是否存在
if (Cache[sKey] == null || Cache[sKey].ToString() == String.Empty)
{
// Cache中没有该Key的项目,表名用户没有登录,或者已经登录超时
// 注意下面使用的TimeSpan构造函数重载版本的方法,是进行是否登录判断的关键。
TimeSpan SessTimeOut = new TimeSpan(0,0,System.Web.HttpContext.Current.Session.Timeout,0,0);
HttpContext.Current.Cache.Insert(sKey,sKey,null,DateTime.MaxValue,SessTimeOut,
System.Web.Caching.CacheItemPriority.NotRemovable,null);
Session[ "User "] = sKey;
[解决办法]
mark