日期:2014-05-18  浏览次数:20392 次

关于会员登陆状态的 <不要你写代码你只要给我下原理>。
这个用到了在线用户表:login   有sessionid:存会话ID   userid:存会员ID
我需要这样的是:
        1一个用户进了,他就往login写了一条记录,当然这时他还没登陆所以userid=0   为游客,但他登陆时,就把userid=改成该会员ID,并把登陆信息保存(session或cookie)
      问题:如何判断他是第一进来,而把记录写入表login呢:用session_start事件吗?
   
    2.如上面问题解决就看下面如何退出登陆:
              I:点网页退出按钮,正常退出,删除login表记录,清除session或cookie.
              II:问题:非正常退出,关闭浏览器,在线超时   ,那因该怎么删除掉login表里的内容呢。

想半天没想明白啊,

------解决方案--------------------
在login表里加一个时间字段,记录该用户最后一次刷新页面的时间,

然后做一个服务或者一个死循环的线程,用表里取超过某时间段的用户记录,删之

datediff函数
------解决方案--------------------
II:问题:非正常退出,关闭浏览器,在线超时 ,那因该怎么删除掉login表里的内容呢

=========

数据库提供一个字段表示,此用户最后一次访问时间,页面刷新请求,更新此时间,

关闭浏览器,在线超时,服务器基本无法精确“意识”到,故,这是一条死路,不往前走了,


当用户请求时,判断最后一次访问时间与当前请求时间的间隔是否小于你设定的超时时间,
若是,即不是第一次请求

再次登录时(比如因为超时Session没有),所有状态重置
------解决方案--------------------
问题一,用sessionid来做唯一性判断是对的,先判断sessionid是否为空,如为空,给用户分配一个随机数做为session,当然要保证唯一。把然后把sessionid存到login表里,这时可以把用户与注册会员一样对待了。如果用户登陆,就修改login表里的sessionid

问题二,login表里要加一个有效时间,每个页面里更新一下。至于死循环,不要这样做。你可以在每次访问 在线用户表的时候,取出有效期小于多少的记录,删除过期的记录。这样就可以。
------解决方案--------------------
我是破土,记得给分,呵呵