如淘宝这样的电子商务网站,可以做到一个账户只能登陆一次吗?
详细的说就是,此账户已经登录,在其他地方登录时,提示此账号已登录。
我个人觉得做不到,原因出在无法完全消除已登录状态。
望高人指教!

解决方案 »

  1.   

    是可以做的到的 方法有多种 可以根据IP 根据时间 来做判断  你百度 google上搜下 蛮多代码的
      

  2.   

    其实最简单的就是用session啦。 不过session存在一定的缺点
      

  3.   

    数据库记录session.ID
    后登陆的人将前边登陆 的人 踢回登陆页
      

  4.   

    我现在用的方法是:
    以email登录,登录后在缓存服务器上,已email为key和value添加一条记录,注销和关闭页面的时候remove缓存服务器上这条记录。
    但是问题是如果有多个为登录状态的页面,关闭一个就会remove掉,其他地方就可以马上登录了。
    如果用cookie记录打开的页面数,打开一个cookie加1,关闭一个减1,也不妥,因为一个页面刷新一次cookie就又会加1。
    还有就是页面超时情况下还需remove,但是这个事件在什么地方触发就头疼了!
      

  5.   

    为什么要这么麻烦。登录的时候直接设个Session["state"]=1;注销Session["state"]=0;每次进入页面检测Session["state"]为何值1为登录。0 为注销的,这样不是行了吗?
      

  6.   

    12楼兄你那样处理不妥,如果用户不安常理操作,不点击注销,就直接关闭页面,或则超时的情况下关闭页面,那这个Session值怎么处理?
      

  7.   

    不怕麻烦就还是用老办法. ajax心跳包.
      

  8.   

    你把问题考虑得太复杂了吧,你登录的时候总是需要验证吧。多读一个int字段来判断是否登录,不会带来什么影响的。
      

  9.   


    如果现在是登录状态,点击注销时可以把session值改为0的,那如果在登录状态下直接关闭页面,那这个把session值改为0的状态在哪儿触发?
      

  10.   

    读数据库可以,但是问题是一样的啊,用户表放一bit字段,登录后为1,未登录为0,但是你登陆后,不点注销,直接关闭页面,就没有办法触发把1变为0的sql了
    ~
      

  11.   

    退出时,不管是在数据库里改变1或0,和在缓存服务器里删除用户登录状态,都有一个事件嘛~如果直接关闭,这个事件肯定是不走的,如果用onload,每个页面又必加此事件,随意关闭一个,肯定也就执行事件了!所以,越深抠越头大。
      

  12.   

    不太明白你说什么。你想太多了。 unload不加任何事件,onload的时候判断登录状态就行了。何必这么复杂!
      

  13.   

    激动了,不好意思,我把onload理解成onbeforeunload了,不好意思,不好意思!~   
    我可以把onload可以理解成登录时的登录按钮吧?   每次登录判断下是对的,就是没有办法做到关闭或注销时恢复到未登录状态。
      

  14.   

    你可以在第二个人登录时,检查前一个用户的SESSIONID是否还是有效,如果有效,那么就登陆失败,如果前一个人的SESSIONID已失效,那么你就可以登陆了。所以,SESSIONID的保存和检验是关键。
      

  15.   

    我的意思是同一个用户名密码,呵呵,登陆之后就保留SESSIONID,然后第二次登陆的时候,检查前次的。
      

  16.   

    这里主要的问题是:用户非正常注销,直接关闭了浏览器。那另外用户不是要等session自动释放?
    不是最佳解决方法哦。
      

  17.   

    那就是SESSION周期的问题了吧?一般来讲,非正常关闭还想更改用户状态,只有这种可能:
    SESSION周期很长时:
    服务器本身时刻监控用户端传来的即时刷新数据,保持连接,如果限定时间内无数据返回,从服务端断掉。
    SESSION周期很短:
    用户端时刻发送信息保持连接,当关闭任何网页,SESSION过一分钟即断掉。
    我觉得本身这个需求是个伪命题,要解决用户的非正规操作,必须用到类似监听的手段,用到这种手段还要很节省资源,不太合理吧?而且,用户为什么已经登录后不能再登录?一旦用户名被窃取呢? 我觉得 第二次上线,把第一次上线的T下去还比较合理(游戏一般都这么做的)
      

  18.   

    为什么没人用Cookies呢。。给人禁用了的话或者清除了就当时未登录~
    给人直接关闭了服务器用后时间减前时间判断,再判断Cookies
      

  19.   

    我前不久也做过,我是在数据库中加了一个登陆状态的字段,数据库中还有最后登陆IP,最后登陆时间两个字段,在同一台机子上登陆的时候用IP判断了一下,就不给登陆了。如果在另外一个地点登陆的话就操作session,把先前登陆的用户被迫下线。当用户刚登陆进去的时候,把用户的session对象和用户名放到map中。你判断一下sessionID与当前登陆的是否一样,不一样就remove掉,这样就可以了。不过非正常关闭问题,那要用session监听器了。
    你也可以建一个表,设置登陆优先级字段来实现
      

  20.   

    保存SESSIONID 用session储存用户登录 ,设置session生存时间
      

  21.   

    绑定IP就可以了哈 。。  因为IP是唯一的!