急,问个关于session.timeout的问题

fanxin_1999 2011-08-15 09:15:16
为了监控用户是否在线,我把Global.asax方法void Session_Start中this.Session.Timeout = 1;也就是session过期的时间为一分钟。我在数据库用户表中也建了个online字段。当用户正常登陆和退出时。online得知都能正常进行状态变换。可是,当session的时间过期后。如何更改数据库中的online字段状态那。最好有代码。

急,谢谢
...全文
389 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
fanxin_1999 2011-08-15
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 net_lover 的回复:]
不是给你写了吗?

Session_Start的事件里面你必须把Session.SessionID存入数据库

void Session_End(object sender, EventArgs e)
{
//Update table set Online=0 where sessionid= Session.SessionID更新就可以了
}

不看别人的回答你还……
[/Quote]

对不起,我看到了,只是没有看明白,我在用户正常登陆和推出的时候,加了个Update table set Online=0 where sessionid= Session.SessionID。

对于Global.asax来进行数据库操作没有用过。

不好意思,希望您不要生气了。

谢谢。按您的方法我试一下。一会再回来。
孟子E章 2011-08-15
  • 打赏
  • 举报
回复
不是给你写了吗?

Session_Start的事件里面你必须把Session.SessionID存入数据库

void Session_End(object sender, EventArgs e)
{
//Update table set Online=0 where sessionid= Session.SessionID更新就可以了
}

不看别人的回答你还来问什么?
fanxin_1999 2011-08-15
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 tomysea 的回复:]
就算是非正常离开,即没有点“退出”按钮。Session也是会过期,Session的生命周期同样存在,Session_End也会触发。
[/Quote]

谢谢,这个我现在明白了,可是如何更改数据库中的online的状态啊。这是个大问题,因为,我们是根据数据库中的online状态来查找谁目前在线的。

请各位达人帮帮忙。。。
fanxin_1999 2011-08-15
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 ciznx 的回复:]
监视用户是否在线不用把 Session 的 Timeout 改成1啊
如果你自己就是自己的用户,你会发现用这个系统有多痛苦……一直要求登录


正确的做法是
1 简单的做法,直接在登录和注销登录处更新数据库中 online 的字段,缺点是如果用户由于长时间未操作而注销登录那这个就捕捉不到它下线的动作了;

2 结合 Cache 来写出更高效的代码,在用户登录时创建 Cache 并更新……
[/Quote]

谢谢。您的帮助。

我现在用的就是第一种方法,正如您讲的缺点是如果用户由于长时间未操作而注销登录那这个就捕捉不到它下线的动作了;所以想解决,却没有经验。

第二种方法非常好,能不能发段代码, 期待中。。。。

tomysea 2011-08-15
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 fanxin_1999 的回复:]
感谢所有回帖。
1.Session_Start的事件里面你必须把Session.SessionID存入数据库。 这个我已经做好了(net_lover

2.可用用global.asax文件的Session_End事件。这个是必须有的,我也做了(tomysea)

我不明白的是,如果用户非正常离开的话,我该如何修改用户的状态。把他的online修改成false.

继续等


……
[/Quote]

就算是非正常离开,即没有点“退出”按钮。Session也是会过期,Session的生命周期同样存在,Session_End也会触发。
fanxin_1999 2011-08-15
  • 打赏
  • 举报
回复
感谢所有回帖。
1.Session_Start的事件里面你必须把Session.SessionID存入数据库。 这个我已经做好了(net_lover

2.可用用global.asax文件的Session_End事件。这个是必须有的,我也做了(tomysea)

我不明白的是,如果用户非正常离开的话,我该如何修改用户的状态。把他的online修改成false.

继续等


子夜__ 2011-08-15
  • 打赏
  • 举报
回复
web.config 下设置。
孟子E章 2011-08-15
  • 打赏
  • 举报
回复
Session_Start的事件里面你必须把Session.SessionID存入数据库

void Session_End(object sender, EventArgs e)
{
//Update table set Online=0 where sessionid= Session.SessionID更新就可以了
}
tomysea 2011-08-15
  • 打赏
  • 举报
回复
如果你非要这么做的话,可用用global.asax文件的Session_End事件

void Session_End(object sender, EventArgs e)
{
//在会话结束时运行的代码。
// 注意: 只有在 Web.config 文件中的 sessionstate 模式设置为
// InProc 时,才会引发 Session_End 事件。如果会话模式
//设置为 StateServer 或 SQLServer,则不会引发该事件。

}
ciznx 2011-08-15
  • 打赏
  • 举报
回复
监视用户是否在线不用把 Session 的 Timeout 改成1啊
如果你自己就是自己的用户,你会发现用这个系统有多痛苦……一直要求登录


正确的做法是
1 简单的做法,直接在登录和注销登录处更新数据库中 online 的字段,缺点是如果用户由于长时间未操作而注销登录那这个就捕捉不到它下线的动作了;

2 结合 Cache 来写出更高效的代码,在用户登录时创建 Cache 并更新数据库中 online 字段来表示它在线了;使用一个专用的 Handler 页面来接受 ajax 请求,这个页面中负责维护用户的在线状态; 用户停留在前台这个页面时,每隔一定时间(如5分钟)来自动在后台访问这个页面。每次用户访问站点的页面时,都去读取一次这个 Cache 以保持其状态,以后只要判断这个 Cache 还在不在就知道用户是不是在线了。给 Cache 过期时绑定回调,让它通知你的程序已过期并更新数据库中 online 值
LMAOhuaNL 2011-08-15
  • 打赏
  • 举报
回复
 由于asp.net程序是默认配置,所以Web.Config文件中关于Session的设定如下:

<sessionState mode='InProc' stateConnectionString='tcpip=127.0.0.1:42424' 
sqlConnectionString='data source=127.0.0.1;Trusted_Connection=yes' cookieless='true' 
timeout='60'/> 


直接就会话失效了
jmx123456789 2011-08-15
  • 打赏
  • 举报
回复
关注下

不过我不是很明白online这个有啥用,登录时的状态有啥用,退出时的状态又有啥用 ?

62,074

社区成员

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

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

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

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