首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 培训 数据库 书店 程序员
中国软件网
欢迎您:游客 | 登录 注册 帮助
  • 继续提问关于在线用户的问题:global.asax的写法??? [已结贴,结贴人:loveniki]
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-07-24 13:41:29 楼主
    如果想在global中写:
    一旦有用户登陆,修改数据库使得该用户状态改为在线,改怎么写?
    我是这样写的:但是不起作用啊??
    C# code
    void Application_Start(object sender, EventArgs e) { // 在应用程序启动时运行的代码 } void Application_End(object sender, EventArgs e) { // 在应用程序关闭时运行的代码 } void Application_Error(object sender, EventArgs e) { // 在出现未处理的错误时运行的代码 } void Session_Start(object sender, EventArgs e) { // 在新会话启动时运行的代码 Application.Lock(); if (Session["User_ID"] != null) { string uid = Session["User_ID"].ToString(); User auser = new User(); auser.User_State = 1; auser.User_ID = uid; auser.User_LoginTime = DateTime.Now.ToString(); try { User_Operate.UpdateState(auser);//更改状态方法 } catch { } } Application.UnLock(); } void Session_End(object sender, EventArgs e) { // 在会话结束时运行的代码。 // 注意: 只有在 Web.config 文件中的 sessionstate 模式设置为 // InProc 时,才会引发 Session_End 事件。如果会话模式设置为 StateServer // 或 SQLServer,则不会引发该事件。 if (Session["User_ID"] != null) { string uid = Session["User_ID"].ToString(); User auser = new User(); auser.User_State = 0; auser.User_ID = uid; auser.User_LoginTime = ""; try { User_Operate.UpdateState(auser);//更改状态方法 } catch { } } }
    50  修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-07-24 13:42:471楼 得分:0
    Application.Lock();
    Application.UnLock();
    加和不加都不行,不好意思,第一次写global,请大家帮忙!!!
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-07-24 13:50:002楼 得分:10
    LZ,你对Application加锁

    却操作的是Session?

    你首先要明白Application是应用程序级的(也是所谓的全局的)

    而Session是用户级的
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-07-24 13:52:463楼 得分:0
    还有Session_Start是在用户第一次请求的时候激发的

    这个时候你的Session["User_ID"]应该还没建立吧?

    所以。你的用户状态是修改不了的
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-07-24 13:52:534楼 得分:0
    LZ,你对Application加锁

    却操作的是Session?

    你首先要明白Application是应用程序级的(也是所谓的全局的)

    而Session是用户级的
    ----------------
    我去掉也不行啊!!!!!!!!!!!!!!
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-07-24 13:55:245楼 得分:10
    protected void Application_AcquireRequestState(object sender, EventArgs e)
            {

            }

    在这个方法下看看
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-07-24 14:02:056楼 得分:0
    期待!
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-07-24 14:05:247楼 得分:0
    楼上的,你期待啥?
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-07-24 14:06:568楼 得分:0
    楼上的,你为什么问楼上期待啥?
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-07-24 14:09:169楼 得分:0
    楼上的,你为什么问楼上的楼上期待啥?
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-07-24 14:18:1310楼 得分:10
    楼上的几位都很无聊哈。。

    一旦有用户登陆,修改数据库使得该用户状态改为在线。不需要在Global里写方法吧。只要在相应的页面里对数据库进行操作即可
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-07-24 14:20:4511楼 得分:0
    一旦有用户登陆,修改数据库使得该用户状态改为在线。不需要在Global里写方法吧。只要在相应的页面里对数据库进行操作即可
    ----------------
    你说的对
    但是如何判断他不在呢?如果正常点击退出好办,但是如果是直接关掉浏览器呢?停电呢?
    那该用户不是一直在线???
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-07-24 14:24:3612楼 得分:20
    引用 11 楼 loveniki 的回复:
    一旦有用户登陆,修改数据库使得该用户状态改为在线。不需要在Global里写方法吧。只要在相应的页面里对数据库进行操作即可
    ----------------
    你说的对
    但是如何判断他不在呢?如果正常点击退出好办,但是如果是直接关掉浏览器呢?停电呢?
    那该用户不是一直在线???


    在B/S结构里,这个无法做到精确
    因为你无法控制客户端的状态
    如果想做到相对的精确,可以开一个使用Application或者Cache来保存用户的在线状态
    然后在应用程序启动的时候,开一个新线程,定时的去刷在线列表
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-07-24 14:27:2013楼 得分:0
    还有另外一个方法:

    protected void Application_AcquireRequestState(object sender, EventArgs e)
            {

            }
    在这个里面更新用户最后的访问时间

    然后如果这个时间上超过一定的时间(例如:5分钟),可以认为用户离线
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-07-24 14:39:3214楼 得分:0
    好像很难100%确保统计的结果是正确的。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-07-24 14:59:2415楼 得分:0
    protected void Application_AcquireRequestState(object sender, EventArgs e)
            {

            }
    在这个里面更新用户最后的访问时间
    ----------------
    怎么获取每个用户的啊,给个例子吧?
    修改 删除 举报 引用 回复

    网站简介广告服务网站地图帮助联系方式诚聘英才English 问题报告
    北京创新乐知广告有限公司 版权所有 京 ICP 证 070598 号
    世纪乐知(北京)网络技术有限公司 提供技术支持
    Copyright © 2000-2008, CSDN.NET, All Rights Reserved