此时限制对一个用户的页面访问

时间:2012-11-07 09:55:01

标签: java php jquery ajax

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

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

  • 我该怎么做?
  • 哪种语言最适合(jQuery,Php等)?

3 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

尝试为这样的事情提出快速实施/解决方法:

您需要什么

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

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

  3. PHP /服务器端脚本

  4. 启用Javscript的客户端

  5. 策略

    1. Javascript每隔X(TTL)秒发出一次HTTP请求。此请求将密钥“占用”(在您选择的缓存中)设置为客户端IP,缓存-ttl为X + 5秒。 (如果你选择DB,你需要每隔X秒重新输入一个cronjob)

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

    3. 注意事项

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

      2. 让用户信任,他们可以轻松绕过这个。

      3. 摘要

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

答案 2 :(得分:0)

不要听任何这些答案。

你可以做到这一点(虽然它确实是那种尴尬)

你需要PHP javascript(使用j-query)和mysql。你想要创建一个PHP脚本,为第一个用户提供一个变量会话,每隔几秒左右,你的ajax将继续用db time()发送db一个脚本;当第二个用户进入php页面时,将询问数据库是否在4秒内有任何刷新,这意味着如果第一个用户仍然登录,则db时间不会超过三秒钟。如果没有这意味着用户空闲或已离开页面,您可以允许访问。要使用php重定向,您可以使用标头功能。如果您对如何做到这一点感兴趣,请升级我的回复并回复,因为它很长,而且我不想无缘无故地写它。

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);

}

&GT?; (你的HTML)

function ok(){     $ .get(“php / foo.php”,function(data){         }); setIntreval(确定,3000);

//分离名为foo.php的php文件