如题,如果觉得我描述不清,请留言

解决方案 »

  1.   

    COOKIE ? OR APPLICATION?
    UP AND GZ
      

  2.   

    判断它的SESSION啊 有的化就说明在线
      

  3.   

    用SessionID去唯一标记一个用户是最可靠的!建一个表,
    字段包括:
    SessionID    varchar
    starttiem    datetime
    lasttime     datetime
    ip           varchar
    UserID       nvarchar
    每个用户访问站点时,就会创建一个Session,每个Session会有一个SessionID,
    向数据库中插入这个用户的信息;
    当再点击网站的内容时就修改这个用户的lasttime;
    如果这个用户在一个回话时间内还没有活动的话,就将这个用户删除!
    原理是这样的,欢迎指教!
      

  4.   


    你要是想实现就在客户端实现。捕捉客户端鼠标事件。
    比如:
    鼠标在你的页面上的时候你将访问者名字(session里面的)提交到一个处理(插入正在访问表)。
    当将鼠标离开你的页面的时候再将访问者的名字(session里面的)再提交到那个页面处理(从正在访问表中删除)
      

  5.   

    <body onmouseover="javascript:insert()" onmouseout="javascript:delete()">
    像上面那样。。当鼠标移到页面上的时候执行insert();当鼠标移出你的页面的时候执行delete();哈。。这样也许符合楼主的意图。。
      

  6.   

    xzq686(瞬) ,哈,不是玩我吧?开玩笑,不过你这样做是不是太不科学了?
      

  7.   

    其实方法很多,关键看你怎么去做,你可以在进入该页面的时候为用户设个session,
    也可以参照楼主xzq686(瞬)的做法
      

  8.   

    你写一个函数,然后在page_load里调用 OnLineUser()就OK了.        Public Function OnLineUser(ByVal UserName As String, ByVal UserGuid As String, _
            ByVal UserSystem As String, ByVal UserBrowser As String, ByVal UserUrl As String, _
            ByVal UserIp As String, ByVal ActiveTime As Date, ByVal LoginTime As Date) As Boolean            Dim rowsAffected As Integer
                Dim parameters As SqlParameter() = { _
                  New SqlParameter("@UserName", SqlDbType.VarChar, 50), _
                  New SqlParameter("@UserGuid", SqlDbType.VarChar, 50), _
                  New SqlParameter("@UserSystem", SqlDbType.VarChar, 50), _
                  New SqlParameter("@UserBrowser", SqlDbType.VarChar, 50), _
                  New SqlParameter("@UserUrl", SqlDbType.VarChar, 1000), _
                  New SqlParameter("@UserIp", SqlDbType.VarChar, 30), _
                  New SqlParameter("@ActiveTime", SqlDbType.DateTime), _
                  New SqlParameter("@LoginTime", SqlDbType.DateTime)}            parameters(0).Value = UserName
                parameters(1).Value = UserGuid
                parameters(2).Value = UserSystem
                parameters(3).Value = UserBrowser
                parameters(4).Value = UserUrl
                parameters(5).Value = UserIp
                parameters(6).Value = ActiveTime
                parameters(7).Value = LoginTime            RunProcedure( _
                  "sp_Accounts_OnLineUser", parameters, rowsAffected)            Return CBool(rowsAffected = 1)        End Function------------------------------------------
            Public Shared Function OnLineUser() As Boolean            Dim Context As System.Web.HttpContext = System.Web.HttpContext.Current
                Dim UserName, UserGuid, UserSystem, UserBrowser, UserUrl, UserIp As String
                Dim ActiveTime As Date = Date.Now
                Dim LoginTime As Date = Date.Now            UserName = Context.User.Identity.Name
                If UserName = "" Then UserName = "Guest User"
                If Context.Request.Cookies("myxOnlineUser") Is Nothing Then
                    UserGuid = System.Guid.NewGuid.ToString
                    Context.Response.Cookies("myxOnlineUser").Value = UserGuid
                    Context.Response.Cookies("myxOnlineUser").Expires = Date.Now.AddHours(24)
                Else
                    UserGuid = Context.Request.Cookies("myxOnlineUser").Value
                End If
                UserSystem = GetUserInfo(Context.Request.UserAgent, 1)
                UserBrowser = GetUserInfo(Context.Request.UserAgent, 2)
                UserUrl = Context.Request.Url.PathAndQuery.ToString.Trim
                UserIp = Context.Request.UserHostAddress            Dim dataUser As New tmpData.User(Configuration.ModuleConfig.GetSqlConnectionString)            Return dataUser.OnLineUser(UserName, UserGuid, UserSystem, UserBrowser, UserUrl, UserIp, ActiveTime, LoginTime)
            End Function
            Private Shared Function GetUserInfo(ByVal Info As String, ByVal Type As Integer)
                Dim GetInfo As String = ""
                Select Case (Type)
                    Case 1
                        If (Instr(Info, "NT 5.2") > 0) Then
                            GetInfo = "操作系统:Windows 2003"
                        ElseIf (Instr(Info, "NT 5.1") > 0) Then
                            GetInfo = "操作系统:Windows XP"
                        ElseIf (Instr(Info, "Tel") > 0) Then
                            GetInfo = "操作系统:Telport"
                        ElseIf (Instr(Info, "webzip") > 0) Then
                            GetInfo = "操作系统:操作系统:webzip"
                        ElseIf (Instr(Info, "flashget") > 0) Then
                            GetInfo = "操作系统:flashget"
                        ElseIf (Instr(Info, "offline") > 0) Then
                            GetInfo = "操作系统:offline"
                        ElseIf (Instr(Info, "NT 5") > 0) Then
                            GetInfo = "操作系统:Windows 2000"
                        ElseIf (Instr(Info, "NT 4") > 0) Then
                            GetInfo = "操作系统:Windows NT4"
                        ElseIf (Instr(Info, "98") > 0) Then
                            GetInfo = "操作系统:Windows 98"
                        ElseIf (Instr(Info, "95") > 0) Then
                            GetInfo = "操作系统:Windows 95"
                        Else
                            GetInfo = "操作系统:未知"
                        End If
                    Case 2
                        If (Instr(Info, "NetCaptor 6.5.0") > 0) Then
                            GetInfo = "浏 览 器:NetCaptor 6.5.0"
                        ElseIf (Instr(Info, "MyIe 3.1") > 0) Then
                            GetInfo = "浏 览 器:MyIe 3.1"
                        ElseIf (Instr(Info, "NetCaptor 6.5.0RC1") > 0) Then
                            GetInfo = "浏 览 器:NetCaptor 6.5.0RC1"
                        ElseIf (Instr(Info, "NetCaptor 6.5.PB1") > 0) Then
                            GetInfo = "浏 览 器:NetCaptor 6.5.PB1"
                        ElseIf (Instr(Info, "MSIE 6.0b") > 0) Then
                            GetInfo = "浏 览 器:Internet Explorer 6.0b"
                        ElseIf (Instr(Info, "MSIE 6.0") > 0) Then
                            GetInfo = "浏 览 器:Internet Explorer 6.0"
                        ElseIf (Instr(Info, "MSIE 5.5") > 0) Then
                            GetInfo = "浏 览 器:Internet Explorer 5.5"
                        ElseIf (Instr(Info, "MSIE 5.01") > 0) Then
                            GetInfo = "浏 览 器:Internet Explorer 5.01"
                        ElseIf (Instr(Info, "MSIE 5.0") > 0) Then
                            GetInfo = "浏 览 器:Internet Explorer 5.0"
                        ElseIf (Instr(Info, "MSIE 4.0") > 0) Then
                            GetInfo = "浏 览 器:Internet Explorer 4.0"
                        Else
                            GetInfo = "浏 览 器:未知"
                        End If
                End Select
                Return GetInfo
            End Function        Private Shared Function Instr(ByVal strA As String, ByVal strB As String) As Integer
                If (String.Compare(strA, strA.Replace(strB, "")) > 0) Then
                    Return 1
                Else
                    Return 0
                End If
            End Function-------------------------------
      

  9.   

    SQL
    ---------------------------
    CREATE PROCEDURE sp_Forums_OnLineUser
    (
    @UserName varchar(50),
    @UserGuid uniqueidentifier,
    @UserSystem varchar(50),
    @UserBrowser varchar(50),
    @UserAction varchar(1000),
    @UserIp  varchar(30),
    @ActiveTime dateTime,
    @LoginTime datetime,
    @UserbClass int,
    @UsersClass int
    )
    AS
    DECLARE @Count int --删除超时的记录
    delete from Forum_Online where Datediff(minute,ActiveTime,getdate())>10 Select  @Count = Count(UserGuid)  from Forum_Online where UserGuid=@UserGuid IF @Count = 0
    begin
    Insert Into Forum_Online (UserName,UserGuid,UserSystem,UserBrowser,UserAction,UserIp,ActiveTime,LoginTime,UserbClass,UsersClass)
    Values
    (@UserName,@UserGuid,@UserSystem,@UserBrowser,@UserAction,@UserIp,@ActiveTime,@LoginTime,@UserbClass,@UsersClass)
    end
    else
    begin
    Update Forum_Online set UserAction=@UserAction,ActiveTime=@ActiveTime,UserbClass=@UserbClass,UsersClass=@UsersClass where UserGuid=@UserGuid
    end
    GO
      

  10.   

    回复人: zcwmxn(千里猪) ( ) 信誉:100  2004-11-15 12:18:00  得分: 0  
     
     
       多问一句,是不是用户离开页面后会从数据库里清除其相应信息?
      
     
    --删除超时的记录
    delete from Forum_Online where Datediff(minute,ActiveTime,getdate())>10这就是删除超时的.如果在线10分不活动就删除.也可以把这时间缩小.看自己定了.如果离开页面就会马上更新数据. 刚才那SQL主要是删除不在线的用户和长时间不活动的用户.
      

  11.   

    刚才SQL是这个.不好意思,发错了.
    ---------------------------------CREATE PROCEDURE sp_Accounts_OnLineUser
    (
    @UserName varchar(50),
    @UserGuid uniqueidentifier,
    @UserSystem varchar(50),
    @UserBrowser varchar(50),
    @UserUrl varchar(1000),
    @UserIp  varchar(30),
    @ActiveTime dateTime,
    @LoginTime datetime
    )
    AS
    DECLARE @Count int --删除超时的记录
    delete from Accounts_Online where Datediff(minute,ActiveTime,getdate())>10 Select  @Count = Count(UserGuid)  from Accounts_Online where UserGuid=@UserGuid IF @Count = 0
    begin
    Insert Into Accounts_Online (UserName,UserGuid,UserSystem,UserBrowser,UserUrl,UserIp,ActiveTime,LoginTime)
    Values
    (@UserName,@UserGuid,@UserSystem,@UserBrowser,@UserUrl,@UserIp,@ActiveTime,@LoginTime)
    end
    else
    begin
    Update Accounts_Online set UserUrl=@UserUrl,ActiveTime=@ActiveTime where UserGuid=@UserGuid
    endGO
      

  12.   

    假使有用户A使用 该页面5秒后,第六秒时用户B登录,能够知道当前有用户A在线
    而如果A在第5秒时,按了“关闭”按钮,退出了改页面,假设系统超时为10分钟
    那么(delete from Forum_Online where Datediff(minute,ActiveTime,getdate())>10)是不起做用的,所以数据库里仍认为用户A在线,而其实A已经退出系统了。请问myexam(exam) 以及其它高人,这个问题怎么解决?
      

  13.   

    呵呵, 多谢fly980218(天魔六少)。为什么是session呢?你对session了解多少呢?
      

  14.   

    多谢  myexam(exam) ;您能不能帮我把我所描述的问题解决,那样就应该可以彻底搞定了
      

  15.   

    redcomet2004(光荣的罗马),此言吉是啊。确实比较麻烦一些
      

  16.   

    建一个在线表,有用户进入该页面就修改他在在线表里面的状态比如在线 表里面有个字段status,内容是网页设计,当从网页设计这个版面进入“图象处理时,你就修改这个字段,把网页设计改为图象处理,然后你在图象处理这个版块里面判断status为”图象处理“的字段,把用户名显示出来不就行了
      

  17.   

    偶突然想出一办法,大家来点评一下
    在body里添加onload和onbeforeunload事件,<body onload="onpage('onpage.aspx',1)" onbeforeunload="onpage('onpage.aspx',0)">onpage函数用来打开一新窗口(onpage.aspx),此窗口执行完事件后自动关闭,onpage.aspx的功能是前面几位DX提到的,在数据库里保存用户-页面状态。