0

我有两个用户:X 和 Y。还有一个页面:页面 Z。要访问页面 Z,我有一个链接。

如果页面 Z 已经在用户 X 浏览器中打开,我希望禁用该链接并拒绝用户 Y 访问该页面。

  • 我怎样才能做到这一点?
  • 哪种语言最适合这样做(jQuery、Php 等)?
4

3 回答 3

0

您可以在服务器端创建一个布尔变量并对其进行跟踪。当用户如果页面 Z 被某人访问然后将此变量设置为 true 并且当其他人试图打开该链接时然后检查布尔变量是否为 true 然后阻止他们重定向到该页面如果它是 false 然后将他们带到页面 Z . 一旦用户离开页面,然后将布尔变量设置为 false。

这可能是实现它的一种方法,但我仍然认为它不是那么直截了当。在实施时您将面临许多障碍。

于 2012-11-07T10:03:24.693 回答
0

只是想为这样的事情想出一个快速的实施/解决方法:

你需要什么

  1. 系统范围的缓存,(APC 或 SESSIONS不会这样做)。您需要memcachedredis之类的东西,以便多个线程可以访问同一个缓存。

  2. 或者我猜只是一个数据库+ crontabs(但首选缓存)

  3. PHP/服务器端脚本

  4. 启用 Javascript 的客户端

战略

  1. Javascript 每 X (TTL) 秒发出一次 HTTP 请求。此请求将键“占用”(在您选择的缓存中)设置为具有 X+5 秒缓存 ttl 的客户端 IP。(如果您选择 DB,您将需要一个 cronjob 每 X 秒重置一次条目)

  2. 如果用户尝试访问该页面并且 'key' !== 他们的 IP 地址,则拒绝访问。

注意事项

  1. 仅允许用户在启用 JS 时进行编辑,否则显示警告

  2. 信任您的用户,他们可以轻松绕过这一点。

概括

基本上描述了使用 JS + 缓存的人工保持活动会话,您可以根据需要将 TTL 设置为任意长或短,具体取决于页面将被编辑的活跃程度。

于 2012-11-07T10:35:25.420 回答
0

不要听任何这些答案。

你可以这样做(虽然确实有点尴尬)

你需要 PHP javascript(使用 j-query)和 mysql。您将要创建一个 php 脚本,该脚本为第一个用户提供可变会话,并且每隔几秒钟左右,您的 ajax 将继续向 db 发送带有 php time(); 的脚本。当第二个用户进入 php 页面时,会在 4 秒内询问 db 是否有任何刷新,这意味着如果第一个用户仍然登录,则从 db 时间延迟不会超过 3 秒。如果没有,则表示用户处于空闲状态或已离开页面,您可以允许访问。要使用 php 重定向,您可以使用 header 函数。如果您对如何执行此操作感兴趣,请升级我的回复和回复,因为它很长,我不想无缘无故地写它。

this is the page you want people to go on:
 $times = time(); 
 $num = $times + 10000;
mysql_connect("localhost", "dbname", "password") or
die("Could not connect: " . mysql_error());
mysql_select_db("dbname");
$result = mysql_query("SELECT  FROM $tablename WHERE areloggedin > $num);
$num=mysql_numrows($result);
if( $num < 0 ){
header('Location: http://redirectpage.html');

}别的{

   $times = time(); 
     $con = mysql_connect("localhost","username","password");
                if (!$con)
                {
                die('Could not connect: ' . mysql_error());
                 } 
                mysql_select_db("dbname", $con);


                $qry = mysql_query("UPDATE
                                     $tbalename SET      
                                    `areloggedin`= '$times'
                WHERE id = $variable_seession_foruser ");


                $result = @mysql_query($qry);

}

?> (你的html)

函数 ok(){ $.get("php/foo.php" , 函数(数据) { }); setIntreval(ok,3000);

//单独的名为 foo.php 的 php 文件

于 2012-11-07T19:24:46.120 回答