我在服务器上运行一个Web应用程序,每个页面只允许一个用户。我想检查页面是否已被使用。如果ts是,我会将横幅的collor更改为红色,并且在使用完成之前不允许进行。但我不知道我该怎么做。是一个PHP应用程序,我也在使用一些JavaScript。该应用程序已经完成,但我现在必须实现它。如何检查页面是否已被访问?
答案 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)
无论你的问题背景如何,我个人都不会创建一个导致这种要求的系统。但是,我会假设你别无选择。
一种方法是:
通过Ajax从当前页面上的客户端获取句点请求(初始触发器是页面加载,之后是Ajax)。
让每个请求重新启动一个短暂的计时器,在其他人可以加入之前为该人提供额外的时间。
当计时器到期时,假设他们已离开页面,因为Ajax请求已停止。
有更整洁的解决方案:Best way to detect when a user leaves a web page?
然而,他们负责决定用户何时离开服务器,理想情况下,您希望将其保留在服务器上。