2014-01-10 2 views
0

페이지 당 한 명의 사용자 만 사용할 수있는 웹 응용 프로그램을 서버에서 실행하고 있습니다. 페이지가 이미 사용 중인지 확인하고 싶습니다. ts라면 배너의 색상을 빨간색으로 변경하고 사용이 끝날 때까지는 허용하지 않습니다. 그러나 나는 어떻게 이것을 할 수 있는지 모른다. PHP 응용 프로그램이며 일부 자바 스크립트도 사용하고 있습니다. 응용 프로그램은 이미 완료되었지만 지금 구현해야합니다. 페이지가 이미 액세스되고 있는지 확인하는 방법은 무엇입니까?페이지가 이미 액세스되고 있는지 확인하는 방법은 무엇입니까?

+0

,

해피 코딩. –

+0

세션을 사용하여 관계를 저장할 수 있습니다. 사용자/bannercolor – zeflex

+3

페이지가 "이미 사용 중"인 경우 어떻게 정의합니까? "사용 완료"를 어떻게 정의합니까? 페이지에 어떤 종류의 조치가 취해 있습니까? –

답변

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를 사용하려는 경우에 대비해 빠르게 뭔가를 조합했습니다. 여기에 lockfile이 있습니다. 페이지를 방문하는 첫 번째 사용자는 세션 ID와 현재 시간 소인을 사용하여 잠금 파일을 생성합니다.

요청할 때마다 잠금 파일이 있는지 확인하고, 그렇다면 사용자가 세션 ID를 확인하여 페이지를 볼 수 있는지 확인합니다. 그런 다음 타임 스탬프를 업데이트합니다.

만약 그가 아니라면 우리는 유휴 시간이 다 되었는 지 확인합니다. 이 경우 다른 사용자가 작업하지 않았기 때문에 로그 파일을 덮어 쓸 수 있습니다. $idleSeconds

이것은 빠르고 간단하지만 기본적인 아이디어를 보여줍니다. 사용자가 익명 사용자가 다음 쿠키를 사용하는 경우 다음, 해당 사용자에 대한 테이블의 페이지 방문을 저장하여 DB에 저장하는 경우)

+0

나는 그와 같은 것에 대해 생각하고있었습니다. 잘 했어 ! – zeflex

+0

조금 지연되는 것을 피할 수없는 항상 존재합니다. $ idleSeconds를 줄이면 20이나 10을 좋아할 수 있는지 알 수 있습니다. – thpl

1

문제의 컨텍스트에 관계없이 개인적으로 이런 종류의 요구 사항을 초래하는 시스템을 만들지는 않습니다. 그러나, 나는 선택의 여지가 없다고 생각할 것이다.

한 가지 방법은 다음과 같습니다

  1. 현재 페이지에 클라이언트에서 아약스를 통해 기간 요청을하기 위해 (초기 트리거는 이후 아약스, 페이지로드)입니다.

  2. 각 요청은 다른 사람이 뛰어 전에 그 사람에게 추가 시간을 제공하는 짧은 타이머를 다시 시작합니다.

  3. 타이머가 만료되면 Ajax 요청이 중지 때문에이 페이지를 떠난 가정합니다.

는 정돈 솔루션이 있습니다 Best way to detect when a user leaves a web page? 그들은 사용자가 멀리 이상적으로 당신이 그것을 유지하려는 서버에서 완료되면 결정의 책임을 그러나

.

관련 문제