asp.net防止用户同时登陆问题

txg3104257 2010-08-31 04:43:39
asp.net防止用户同时登陆问题 就是一个账号登陆系统后。这个账号不能在其它计算机上进行登陆。

我自己的思路有问题:

当一个账号登陆时给把它的状态设置1,点击退出时状态清0 这样通过状态就能实现这一功能

但是如果用户不是点击退出按钮退出和断电、关闭浏览器退出.....等意外情况退出时那么系统就不能修改它的状态了

下次登陆时系统就会提示该账号已登陆就不能进行登陆了

大家给给思路~~这个应该怎么做~~
...全文
281 27 打赏 收藏 转发到动态 举报
写回复
用AI写文章
27 条回复
切换为时间正序
请发表友善的回复…
发表回复
bigbaddy007 2011-02-24
  • 打赏
  • 举报
回复
建议不要使用ajax,因为那样在多用户的时候会带来服务器负担!

QQ的登录机制就很好啊!
zhouwei7682719 2010-08-31
  • 打赏
  • 举报
回复
session[]
a12321321321312321 2010-08-31
  • 打赏
  • 举报
回复
session——start;里面跟session_end里面写代码。
onlylikews1 2010-08-31
  • 打赏
  • 举报
回复
定时刷新
txg3104257 2010-08-31
  • 打赏
  • 举报
回复
等等等等
li150dan 2010-08-31
  • 打赏
  • 举报
回复
保存在Session里面
journey_q 2010-08-31
  • 打赏
  • 举报
回复
百度、Google:Asp.Net单点登录
xia411123129 2010-08-31
  • 打赏
  • 举报
回复
感觉应该是用Session的吧,如果用户退出是像关闭浏览器这种,关闭浏览器session就会清空了撒,定时根据session中是否有值来操作数据库某个用户的状态吧。
journey_q 2010-08-31
  • 打赏
  • 举报
回复
rczjp 2010-08-31
  • 打赏
  • 举报
回复
Application这个不是很准确
只能这个登录就另外一个下线,和QQ一样
lisp_stu 2010-08-31
  • 打赏
  • 举报
回复
这个问题好简单哦 多平台单点登录 用webservice
马老虎 2010-08-31
  • 打赏
  • 举报
回复
以前有好多类似讨论的帖子,还没发现什么好的解决方案
mjfei 2010-08-31
  • 打赏
  • 举报
回复
关于掉电等意外原因,不知道有没有解决办法! 关注,学习
myhope88 2010-08-31
  • 打赏
  • 举报
回复
在数据库中用一个字段保存一个sessionid值,每次有人登录成功时就更新这个值,这样可让前一个同用户名的断掉吧,如果要实时的,得定时刷新状态
szhuk 2010-08-31
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 goddy123 的回复:]
能不能换个思路,如果这个帐号在另一个地方登陆了,就把第一个登陆断掉?
[/Quote]
我感觉这倒是一个方法,不过有种情况不好处理,就是同一局域网环境内对外的IP一致,如果这样在同一局域网能还是允许多台机器登录,并且后面的总踢掉前面的。
czhhlove 2010-08-31
  • 打赏
  • 举报
回复
你不是已经有思路了吗? 创建数据库用户表的时候添加一个状态字段,登陆的时候先判断用户的状态,如果用户处于登录状态,弹出提示不能登录.如果注销状态则可以登录. 你的思路没问题呀. 我以前就做过一个项目跟你的思路一模一样啊.
程序员哥哥 2010-08-31
  • 打赏
  • 举报
回复
保存在session里是正道。
xinv19shi 2010-08-31
  • 打赏
  • 举报
回复
Button被点击后disable掉该页面中所有的Button,从而防止提交延时导致的多次提交。基于之前的onceclickbutton脚本.

//ASP.NET中防止页面多次提交的代码:javascript< script language="javascript"> < !-- function disableOtherSubmit() {
var obj = event.srcElement;
var objs = document.getElementsByTagName('INPUT');
for(var i=0; i< objs.length; i++)
{
if(objs[i].type.toLowerCase() == 'submit')
{
objs[i].disabled = true;
}
}
} //--> < /script>//ASP.NET中防止页面多次提交的代码:asp.netpublic class PreventMultiClick : System.Web.UI.Page {
protected System.Web.UI.WebControls.Button Button1; protected System.Web.UI.WebControls.Button Button2;
protected System.Web.UI.WebControls.LinkButton LinkButton1; protected System.Web.UI.WebControls.Button Button3; private void Page_Load(object sender, System.EventArgs e)
{
this.GetPostBackEventReference(this.Button3);
//保证 __doPostBack(eventTarget, eventArgument) 正确注册 if(!IsPostBack)
{
System.Text.StringBuilder sb = new System.Text.StringBuilder();
sb.Append("if (typeof(Page_ClientValidate) == 'function')
{
if (Page_ClientValidate() == false)
{
return false;
}
}"); //保证验证函数的执行 sb.Append("if(window.confirm('are you sure?')==false) return false; ");
//自定义客户端脚本 sb.Append("disableOtherSubmit(); ");
// disable所有submit按钮 sb.Append(this.GetPostBackEventReference(this.Button3));
//用__doPostBack来提交,保证按钮的服务器端click事件执行 sb.Append("; ");
Button3.Attributes.Add("onclick",sb.ToString());
}
} #region Web Form Designer generated code override protected void OnInit(EventArgs e)
{
// // CODEGEN: This call is required by the ASP.NET Web Form Designer. // InitializeComponent();
base.OnInit(e);
}
/// < summary> /// Required method for Designer support - do not modify /// the contents of this method with the code editor. /// < /summary> private void InitializeComponent()
{
this.Button3.Click += new System.EventHandler(this.Button3_Click); this.Load += new System.EventHandler(this.Page_Load);
}
#endregion private void Button3_Click(object sender, System.EventArgs e)
{
System.Threading.Thread.Sleep(3000);
Response.Write("Hello world!");
}
} 此处只是disable掉所有的submit button, 我觉得其它的可提交控件也是可以通过类似的方法来disable的.

以上就是ASP.NET中防止页面多次提交的代码实现
txg3104257 2010-08-31
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 wuyq11 的回复:]
单点登录,
设置用户状态,AJAX轮询判断用户操作时间和状态
[/Quote]

登陆时我可以在Application中存在此用户

ArrayList list = Application.Get("GLOBAL_USER_LIST") as ArrayList;
for (int i = 0; i < list.Count; i++)
  {
  if (UserId == (list[i] as string))
  {
  //已经登录了,提示错误信息
  Error.Text = "此用户已经登录";
  return;
  }
  }

但是退出时就不好怎么做了
有问题的就是当用户直接点浏览器右上角的关闭按钮时、按下Alt+F4时就不能正确判断用户已退出
wuyq11 2010-08-31
  • 打赏
  • 举报
回复
单点登录,
设置用户状态,AJAX轮询判断用户操作时间和状态
加载更多回复(7)

62,074

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧