如何实现这样的功能:一个访客,如果已经打开了这个网页,那么在新窗口中再打开这个网址就提示已经打开,或者直接跳到已经打开这个网址的窗口。描述可能比较绕,我举个例子。做在线聊天,一个人在浏览器中输入www.***.com/chat 那么浏览器正常打开这个页面。如果这个页面不关闭,他在新窗口再输入这个网址,就不能让他再打开了。提示已经打开过这个网页,或者直接切换到已经打开这个网址的窗口。如何实现,请具体指教。
PS:我已经试过cookie了,用cookie记录这个网页是否被打开了,同时设置浏览器关闭cookie失效,但是有几个问题解决不了:
一是,如果用两个浏览器,是可以同时打开这个网页的。因为cookie不能跨浏览器;
二是,有时候浏览器异常关闭,那么这个cookie值就没有失效,下次就打不开这个网页了。重分悬赏,如果发错区,请版主移动,谢谢。cookie浏览器聊天

解决方案 »

  1.   

    如果 不用cookie的话,那只能在服务段做处理,可以根据IP地址做唯一标识或用户等,在session过期时清除标记
      

  2.   

    cookie配合上服务器端 
    如果做的是局域网内的 应用的话  还是有实现的可能
    其它情况的话  建议放弃吧。。
      

  3.   

    那如果用户打开这个页面,我记录了session,用户又关闭了这个页面,session还在,他就不能再次打开这个页面了。
      

  4.   

    想实现这种功能用session、cookie这种方式肯定是不行的,cookie解决不了跨浏览器的问题,session解决不了客户端关闭的问题,必须得用flash或者websocket这种能保持长链接的技术在服务器记录当前机器已经打开这个地址了,这样才能保证
      

  5.   

    1.服务器端设置用户在线状态(用户名+ip+session) ,可以用唯一cookie记录当前页面.在其他页面或者其他浏览器页面打开,根据用户在线状态进行提示(但没法直接切换到指定窗口)。
    2.浏览器端定时与服务器端“交流”,服务器端在期望时间内没有收到浏览器端信息则认为用户已下线,初始化各种状态(用户可以再次进入)
      

  6.   

    通过页面打开的时间和用户的ID标识一个特定的页面,通过js获取页面打开的时间,在更新消息的同时发送这个打开页面的时间。这样的话如果再打开一个页面的话,就会发送不同的打开页面时间,这样就能区别不同的页面了。如果服务器同时受到两个带有不同页面打开时间的消息更新请求,那么只响应那个页面打开时间较早的。但是在打开页面之前可能需要等待1个消息刷新周期那么长的时间,不知道怎么避免这个,毕竟这会影响用户体验的,但是是否会出现这个问题我不太确定。可能有点想当然了,不知道有没有漏洞。
      

  7.   

    http://www.google.com.hk/#newwindow=1&q=unique+identification+tab+browser&safe=strict
    搜了一下,唯一标识tab好像是个很难的问题,基本上都说不能。我16楼说的分配唯一标识指的是在页面打开之后发送一个AJAX,返回的那个值必须每次都是不同的,至少对于单个用户来说必须是每次都不同的。不过对于所有用户都不同可能更好处理一些,对服务器的压力可能也更小一些。
      

  8.   

    cookie 可以解决
    假定 打开页面后 设置一个 在cookie中设置一个key 他的值是当前时间
    每间隔 1秒  刷新时间页面 开始 要判断 这个key是否存在
    不存在 表示没有 打开页面
    存在 则看 他的值的时间 和 当前时间 相差多少 相差很少 1秒的话 有理由认为 有一个页面已经打开了
    那么跳转其他页面
    否则 正常开始
    感觉有点啰嗦 
      

  9.   

    cookie 可以解决
    假定 打开页面后 设置一个 在cookie中设置一个key 他的值是当前时间
    每间隔 1秒  刷新时间页面 开始 要判断 这个key是否存在
    不存在 表示没有 打开页面
    存在 则看 他的值的时间 和 当前时间 相差多少 相差很少 1秒的话 有理由认为 有一个页面已经打开了
    那么跳转其他页面
    否则 正常开始
    感觉有点啰嗦 还是这个问题,如果相差少于一秒,是判断页面已经打开这是第二次打开。还是判断为刚刚关闭了页面又重新打开了这个页面?
      

  10.   

    cookie 可以解决
    假定 打开页面后 设置一个 在cookie中设置一个key 他的值是当前时间
    每间隔 1秒  刷新时间页面 开始 要判断 这个key是否存在
    不存在 表示没有 打开页面
    存在 则看 他的值的时间 和 当前时间 相差多少 相差很少 1秒的话 有理由认为 有一个页面已经打开了
    那么跳转其他页面
    否则 正常开始
    感觉有点啰嗦 还是这个问题,如果相差少于一秒,是判断页面已经打开这是第二次打开。还是判断为刚刚关闭了页面又重新打开了这个页面?
    你页面 如果打开着
    那么 那个cookie里面的数值 每秒换一次
    所以你 间隔1秒检查 1次 就知道有没有其他人在动了
    办法是很多的
      

  11.   

    那如果用户打开这个页面,我记录了session,用户又关闭了这个页面,session还在,他就不能再次打开这个页面了。重新打开时踢掉之前的session就行,这样最简单。
    要么页面关闭时用onunload清掉服务端session,但是还不够,你要考虑异常关闭以及断网的情况。
    再或者你做一个“心跳包”的东西,客服端每隔几秒向服务端发信息表示还在线
      

  12.   

    cookie 可以解决
    假定 打开页面后 设置一个 在cookie中设置一个key 他的值是当前时间
    每间隔 1秒  刷新时间页面 开始 要判断 这个key是否存在
    不存在 表示没有 打开页面
    存在 则看 他的值的时间 和 当前时间 相差多少 相差很少 1秒的话 有理由认为 有一个页面已经打开了
    那么跳转其他页面
    否则 正常开始
    感觉有点啰嗦 还是这个问题,如果相差少于一秒,是判断页面已经打开这是第二次打开。还是判断为刚刚关闭了页面又重新打开了这个页面?
    你页面 如果打开着
    那么 那个cookie里面的数值 每秒换一次
    所以你 间隔1秒检查 1次 就知道有没有其他人在动了
    办法是很多的cookie的值更改,只有在网页再次加载的时候才能使用,不是说立马就能用的。
      

  13.   

    那如果用户打开这个页面,我记录了session,用户又关闭了这个页面,session还在,他就不能再次打开这个页面了。重新打开时踢掉之前的session就行,这样最简单。
    要么页面关闭时用onunload清掉服务端session,但是还不够,你要考虑异常关闭以及断网的情况。
    再或者你做一个“心跳包”的东西,客服端每隔几秒向服务端发信息表示还在线我现在有了个思路,是服务器端判断,既然是聊天,肯定有向服务器发送状态的进程,所以我只需要判断他在线,就不让他再打开了。不要cookie,解决跨浏览器问题。