asp.net 用户的登出

cuinan_6 2010-09-26 11:12:26
现在我想要做的是,我又一个登出的按钮,我点击登出,从session 中取出我登录时,在session 中保存的用户,之后改变数据库中,改用户的状态时登出状态, 如果用户并没有直接点登出而是直接关闭浏览器,我怎么样才能改变数据库中该用户的状态。
...全文
353 20 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
wuyq11 2010-09-26
  • 打赏
  • 举报
回复
Session.RemoveAll();
Session.Abandon();
FormsAuthentication.SignOut();
修改数据库中登录状态
ajax轮询查询用户状态
beg200710 2010-09-26
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 misswangjinfeng 的回复:]
//单人登入,即时登出
//首先设置web.config文件;
<sessionState mode="StateServer" cookieless="false" stateConnectionString="tcpip=127.0.0.1:42424" sqlConnectionString="data source=127.0.0.1;Trusted_Connection=yes" t……
[/Quote]

yuxh81 2010-09-26
  • 打赏
  • 举报
回复
通过Global.asax文件中的Session_End事件监测,不过要等到会话超时才会触发

估计(我也没弄过)也可以定时向服务器发送信息(包含用户名和时间),表示客户仍在使用
然后服务器定时清理最近没有收到消息的用户
misswangjinfeng 2010-09-26
  • 打赏
  • 举报
回复
//单人登入,即时登出
//首先设置web.config文件;
<sessionState mode="StateServer" cookieless="false" stateConnectionString="tcpip=127.0.0.1:42424" sqlConnectionString="data source=127.0.0.1;Trusted_Connection=yes" timeout="1"/>

//然后在登入事件中加入;

///同一时间点,检查登录用户ID的唯一性

///</summary>

///<param name="strZh">用户ID </param>

///<returns></returns>

private bool ckeckUserOnlyOne(string strZh)

{

string strTempZh=strZh;

if (Cache[strZh] == null)

{

TimeSpan SessTimeout = new TimeSpan(0,0,System.Web.HttpContext.Current.Session.Timeout,0,0);

HttpContext.Current.Cache.Insert(strTempZh,strTempZh,null, DateTime.MaxValue, SessTimeout, System.Web.Caching.CacheItemPriority.NotRemovable, null);

return true;

}

else

return false;

}

//复制代码
//然后在登出事件加入;


try

{

Session.Abandon();

System.Web.HttpContext.Current.Session.RemoveAll();

Cache.Remove("用户ID");

}

catch (Exception ex)

{ }

//复制代码
//主角登场了,在每个页面引入下面的JS;


<script>

var step=0;

function myRefresh()

{

var httpRequest = new ActiveXObject("microsoft.xmlhttp");

httpRequest.open("GET", "delSession.aspx", false);

httpRequest.send(null);

step ++;

if(step <2)//注意2

{

setTimeout("myRefresh()",30*1000); //30秒

}

}

myRefresh();

</script>
//项目的Root目录下new一个delSession.aspx文件,然后在她的page_laod方法中写上Response.Expires = -1;


无爱大叔 2010-09-26
  • 打赏
  • 举报
回复
点关闭窗口的时候,可以触发事件(js事件)onbeforeunload,用js ajax异步去调用登出的相关操作;此方法无法捕获突然停电等特殊因素。
在用户登录的时候可以考虑使用application来存储每个登录用户的session,用ajax心跳检测某用户是否已经登出。

考虑的不甚周全,期待高手解答!
cuinan_6 2010-09-26
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 woainikeaibibi 的回复:]
引用 4 楼 cuinan_6 的回复:
没有好的办法嘛! 那么多的网站登出 是怎么做到的,我只是想在 用户在登录状态下,并没有登出,但是他已经关闭了浏览器,那么我的数据库中的数据显示仍然是 登录状态。这不是没有意义了嘛。

我想你的意思是不是比如说:我刚注册个账号:aaa,登录过后进入页面,在数据库中aaa是已登录,而你有个登出按钮,点击的时候把aaa登录状态该成已登出,但是用户是直接关闭……
[/Quote]

对就是这个意思
cuinan_6 2010-09-26
  • 打赏
  • 举报
回复
谢谢,了解了!
七爷 2010-09-26
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 cuinan_6 的回复:]
没有好的办法嘛! 那么多的网站登出 是怎么做到的,我只是想在 用户在登录状态下,并没有登出,但是他已经关闭了浏览器,那么我的数据库中的数据显示仍然是 登录状态。这不是没有意义了嘛。
[/Quote]
我想你的意思是不是比如说:我刚注册个账号:aaa,登录过后进入页面,在数据库中aaa是已登录,而你有个登出按钮,点击的时候把aaa登录状态该成已登出,但是用户是直接关闭浏览器的,所以你不能判断,数据库中还是已登录是吧
No1bigtooth 2010-09-26
  • 打赏
  • 举报
回复
你要解决的问题我之前遇到过,是想解决单账号不能同时在线多个吧
由于不同的浏览器对session的支持不一样,所以很难做到客户退出的服务器端监测
例如你举出的用户直接关闭浏览器,这时候属于浏览器非法关闭行为,即使使用脚本也无法实现这种非正常关闭的监测
所以目前对禁止单账号同时多用户登录的问题有两种解决方法
一、定时对无操作的用户清空登录状态
二、如果账号被二次登录,顶出上次登录的账号,这样也只能实现单账号单用户使用
cuinan_6 2010-09-26
  • 打赏
  • 举报
回复
没有好的办法嘛! 那么多的网站登出 是怎么做到的,我只是想在 用户在登录状态下,并没有登出,但是他已经关闭了浏览器,那么我的数据库中的数据显示仍然是 登录状态。这不是没有意义了嘛。
b87936260 2010-09-26
  • 打赏
  • 举报
回复
是unload事件吗?
lilihua520 2010-09-26
  • 打赏
  • 举报
回复
来个倒计时
porschev 2010-09-26
  • 打赏
  • 举报
回复
只能是看这个用户在N分钟内无操作了。。。。那就改变状态
lingyou2199 2010-09-26
  • 打赏
  • 举报
回复
929856931
chenyu112 2010-09-26
  • 打赏
  • 举报
回复
我们系统原来有这个功能,后来被砍掉了
对于用户关闭浏览器之类的,还是没有捕获
只能通过专门的“退出”按钮,才可以,用着不方便

关注
gxq323 2010-09-26
  • 打赏
  • 举报
回复
很难解决,只能是后一个登陆的把前一个顶掉,否则在线状态不允许你登录了
Reaforstar 2010-09-26
  • 打赏
  • 举报
回复
   应该是单点登录里面的登出功能!!!
    我最近也在做,只是用的是基于SAML协议的SSO,里面涉及到证书什么的,也纠结的很!!!
chenguang79 2010-09-26
  • 打赏
  • 举报
回复
楼主的问题,有一个方法可以解决。但是这个方法要有二个条件。一是你的统计是否要很及时,二是你的网站用户访问量有多大
方法是,楼主在用户经常点击的页面内写一个方法,用户进到页面,你就修改用户的登录时间。
在每个用户进行登录的时候,用户登录成功后,或是验证登录之前,到你遍历一下数据库中用户的登录与现在时间差二十分钟的,你就可以认为他没有操作了。你就可以改变状态了
No1bigtooth 2010-09-26
  • 打赏
  • 举报
回复
onbeforeunload方法我使用过,这种方法的弊端是:无法捕捉非法关机事件,例如在你未关闭浏览器时,你电脑死机了,你直接按下了电源键;停电了;你用任务管理器关闭了浏览器等等;所以在使用这种服务器监测客户端关闭事件时,不要对登录单独设置一个数据库字段

62,244

社区成员

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

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

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

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