如何检查页面是否已被访问?

时间:2014-01-10 14:24:31

标签: javascript php

我在服务器上运行一个Web应用程序,每个页面只允许一个用户。我想检查页面是否已被使用。如果ts是,我会将横幅的collor更改为红色,并且在使用完成之前不允许进行。但我不知道我该怎么做。是一个PHP应用程序,我也在使用一些JavaScript。该应用程序已经完成,但我现在必须实现它。如何检查页面是否已被访问?

2 个答案:

答案 0 :(得分:2)

<?php

session_start();

$lockfile = 'lock.txt';
$idleSeconds = 300;



if(file_exists($lockfile))
{
    // read the file. 
    // $file[0] = timestamp of last page visit
    // $file[1] = session id
    $file = file_get_contents($lockfile);
    $file = explode('|', $file);

    // If the same user is visiting the site he shall pass and refresh the timestamp
    // Do the same for a new user when the idletime ran out
    if($file[1] == session_id() OR $file[0] + $idleSeconds <= time())
        file_put_contents($lockfile, time() .'|'. session_id());
    else
        die("You are not allowed to view the page. Wait until some other motherfucker is done here.");      
}
else
{
    // When there's no lockfile create one for the current user
    file_put_contents($lockfile, time() .'|'. session_id());
}

?>

<html>
<head>
    <title>My locked Page</title>
</head>
<body>
    Yeah some cool shit man
</body>
</html>

我很快为你拼凑了一些东西,以防你想要一个只有php的方法。 我们在这里使用锁文件。访问该页面的第一个用户将生成一个带有会话ID和当前时间戳的锁文件。

我们检查每个请求是否存在lockfile,如果是,我们检查是否允许用户通过检查其会话ID来查看该页面。然后我们更新时间戳。

如果他不是我们检查空闲时间是否用尽。如果是这种情况,我们可以覆盖日志文件,因为其他用户没有采取行动$idleSeconds

这是一个快速而肮脏的解决方案,但显示了基本的想法。

快乐的编码;)

答案 1 :(得分:1)

无论你的问题背景如何,我个人都不会创建一个导致这种要求的系统。但是,我会假设你别无选择。

一种方法是:

  1. 通过Ajax从当前页面上的客户端获取句点请求(初始触发器是页面加载,之后是Ajax)。

  2. 让每个请求重新启动一个短暂的计时器,在其他人可以加入之前为该人提供额外的时间。

  3. 当计时器到期时,假设他们已离开页面,因为Ajax请求已停止。

  4. 有更整洁的解决方案:Best way to detect when a user leaves a web page?

    然而,他们负责决定用户何时离开服务器,理想情况下,您希望将其保留在服务器上。