asp.net 怎么判断一个用户是否在线?
用Session怎么弄?使用SessionID该怎么做?
本人新手,请大侠们 多多指教

解决方案 »

  1.   

    在global.asax中的session_start中写处理代码。
      

  2.   

    参考 http://blog.sina.com.cn/s/blog_4e6dffee0100mbru.html
      

  3.   

    数据库表的用户字段加一个IsOnLine
    Login的时候,设置为true
    Logout的时候,设置为false
    另外Session_End的时候,也设置为false。
      

  4.   

    4楼的方法我已经做了
    用户表已经存在一个是否在线的字段.
    就是不知道
    Session_End的时候
    能否去修改isonline这个字段.
      

  5.   

    每30秒更新一次字段lastUpdateTime,获取在线用户
    Select * From sys_user Where datediff(ss,lastUpdateTime,getdate())<=60
      

  6.   


    你判断此用户的“最后一次访问时间”是否超时就可以判断他是否在线了。(通常这需要ajax方式随便、定时访问一下)跟“sql作业”没有关系。
      

  7.   

    Session_End里面写 回话结束自动清除登录状态,
    更新字段,与断电、死机没干系
      

  8.   

    楼上正解,如果楼主感觉还是不保险的话,就用sql吧。
      

  9.   

    ajax轮询呗,Client端不发送信号了,就是离线了.
      

  10.   

    登录成功的时候声明一个sessino["一个名称标识"]=那个账号
    每当登录的时候判断这个session存在不,就可以知道他登录没有
      

  11.   

    写个方法判断session是不是为空,如果是 页面跳转到登陆页
    public static void Islogin()
        {
            if (System.Web.HttpContext.Current.Session["userid"] == null)
            {
               System.Web.HttpContext.Current.Response.Write("<script>parent.location.href='login.aspx';</script>");
            }
        }
      

  12.   


    Session_Start(object sender, EventArgs e),
    Session_End(object sender, EventArgs e)这两个事件里面判断修改在线的值状态在线与否在数据库统计。
      

  13.   

    加一个字段,时间型,操作页面的时候更新一下时间。然后SQL作业。长时间这个字段没有更新的就说明不在线了。
      

  14.   

    你可以记录一些关键的动作的时间,如果用户超过了10分钟没有动作,就可以认为该用户已经离开,或者在你所有的页面上都写上ajax,每个一分钟,发送一个信息回去,表明用户还是打开本网站中的一个网页的
      

  15.   


    但是如果别人直接关了游览器怎么办..Session默认保存20分钟..这段时间还是当他在线的吗?
      

  16.   

    还是用ajax判断~隔一点的时间更新 判断用户是否超时就行了··
      

  17.   

    不能精确判断用户是否在线,这是由于HTTP无状态确定的只能查询时间,最后一次多久也刷新时间,就视为离线
      

  18.   

    一般用AJAX,刷新吧,但时间间隔太短,会弄死服务器,太长,又不精确,
      

  19.   


    using System;
    using System.Collections.Generic;
    using System.Web;
    using System.Web.Security;
    using System.Web.SessionState;namespace Liang.Web
    {
        public class Global : System.Web.HttpApplication
        {        protected void Application_Start(object sender, EventArgs e)
            {
                Application["online"] = 0;
            }        protected void Session_Start(object sender, EventArgs e)
            {
                Application.Lock();
                Application["online"] = (int)Application["online"] + 1;
                Application.UnLock();
            }        protected void Application_BeginRequest(object sender, EventArgs e)
            {        }        protected void Application_AuthenticateRequest(object sender, EventArgs e)
            {        }        protected void Application_Error(object sender, EventArgs e)
            {        }        protected void Session_End(object sender, EventArgs e)
            {
                if (Session["user_id"] != null)
                {
                    int id = Convert.ToInt32(Session["user_id"]);
                    new BLL.user().UpdateField(id, "is_online=0");
                }
                Application.Lock();
                Application["online"] = (int)Application["online"] - 1;
                Application.UnLock();
            }        protected void Application_End(object sender, EventArgs e)
            {
                if (Session["user_id"] != null)
                {
                    int id = Convert.ToInt32(Session["user_id"]);
                    new BLL.user().UpdateField(id, "is_online=0");
                }
            }
        }
    }这个是统计当前的在线人数的。不知道怎么弄某个用户是否在线。
      

  20.   


    这个是统计在线人员,会员在线啊,都可以,一般是这样,不过这个统计不精准,只能一个段时间不上线就判断,是否在线,不过,HTTP原理就是这样,没有办法,少整这闹心的事,没啥用
      

  21.   

    b/s很难弄出准确结果的。 ajax保持心跳访问,是一种解决办法。