限制客户访问带有1个标签和1个浏览器的网站?

web*_*ver 5 browser limit web

我想做像play.clubpenguin.com这样的事情.

它的作用是,当你访问该网站时,可能使用firefox或IE,如果你打开一个新标签或使用其他浏览器,当你再次访问该网站时,它会显示如下内容:"请关闭其他打开的浏览器这个页面"或类似的东西.

这该怎么做?(其客户的要求)

更多信息:该网站是Flash网站

编辑:

好吧,我认为这是一个棘手的问题,一般来说,这可以使用php,mysql和JS完成吗?

ctf*_*ord 7

每次向用户提供Flash页面时,都会生成随机令牌.将此令牌嵌入页面中的某个位置,例如作为flashVar.此外,将最近生成的令牌存储在用户的会话中.

每当Flash将某些内容发回服务器时,也会发布令牌.如果令牌与会话中存储的令牌不匹配,请拒绝该帖子.

这样,只有最近生成的页面版本才能与服务器通信,如果用户打开多个版本的页面,则只有最新版本才能使用.

即使用户在其他计算机上打开额外的浏览器,此技术也应该有效.它不使用IP地址来建立身份.并且用户不可能以某种方式永久地"锁定",因为每次他们再次打开页面时,您都会重置存储的令牌.

这与某些框架将验证令牌插入表单以防止跨站点请求伪造攻击的方式类似.


LJW*_*LJW 0

脑海中浮现出几个选择……

  1. 当他们第一次打开网站时,您需要将用户的当前状态存储在 cookie 或类似内容中,每次打开网站时都会检查该状态。如果状态为“活动”,则意味着他们打开了另一个窗口。确保在离开原始站点窗口时清除状态的问题 - 您需要侦听事件window.onunload,并在此时清除状态 - 但您不能 100% 保证这会发生。
  2. 否则,您可以在站点上放置一个脚本,每n秒 ping 一次服务器脚本,通知服务器有一个为该客户端打开的窗口,并阻止打开新窗口,直到 ping 中断为止。
  3. 为了变得更复杂,您可以在服务器和客户端之间维护持久连接(通过套接字或类似的),这将记录相同的内容。来自客户端的调用较少,设置起来有点复杂。有关 flash + 套接字的基本信息,请参阅http://www.kirupa.com/developer/flash8/php5sockets_flash8.htm 。
  4. 鉴于您正在使用 Flash,您可以查看本地共享对象(flash cookie)来存储状态。仍有可能错过卸载事件,但至少 cookie 会在所有浏览器会话和浏览器类型中保留。

选项 3 是最好的恕我直言。