현재는 세션에 값을 설정하는 데 사용합니다. 들어올 때마다 해당 값이 존재하는지 여부를 판단합니다. 이는 해당 값이 잠겨 있으면 이 요청이 실행되지 않는다는 의미입니다. 존재하지 않으면 값을 설정하고 후속 작업을 수행하십시오.
<code>class controller{ function index(){ if(isset($_SESSION['lock'])) return; $_SESSION['lock'] = 1; sleep(1);//这里会查询用户的资格,并给用户发送流量,如果两次同时进来,会造成两次都认为是有资格的,并且会给用户发两次相同流量 unset($_SESSION['lock']); } } </code>
저는 이것이 가능하다고 생각했고, 세션은 Redis에 매우 빠르게 저장되었습니다. 잠을 못 자고 지금 막 이것저것 만지작거리기 전까지는 사용자가 여러 요청을 실행하는 것이 여전히 가능하다는 것을 알았습니다. 동시에 동일한 인터페이스.
한 사람이 동시에 여러 건의 요청을 원할 경우 첫 번째 요청만 처리됩니다. 동일인인지 판단하려면 세션을 기준으로 판단하세요.
이를 어떻게 보장하나요?
현재는 세션에 값을 설정하는 데 사용합니다. 들어올 때마다 해당 값이 존재하는지 여부를 판단합니다. 이는 해당 값이 잠겨 있으면 이 요청이 실행되지 않는다는 의미입니다. 존재하지 않으면 값을 설정하고 후속 작업을 수행하십시오.
<code>class controller{ function index(){ if(isset($_SESSION['lock'])) return; $_SESSION['lock'] = 1; sleep(1);//这里会查询用户的资格,并给用户发送流量,如果两次同时进来,会造成两次都认为是有资格的,并且会给用户发两次相同流量 unset($_SESSION['lock']); } } </code>
저는 이것이 가능하다고 생각했고, 세션은 Redis에 매우 빠르게 저장되었습니다. 잠을 못 자고 지금 막 이것저것 만지작거리기 전까지는 사용자가 여러 요청을 실행하는 것이 여전히 가능하다는 것을 알았습니다. 동시에 동일한 인터페이스.
한 사람이 동시에 여러 건의 요청을 원할 경우 첫 번째 요청만 처리됩니다. 동일인인지 판단하려면 세션을 기준으로 판단하세요.
이를 어떻게 보장하나요?
데이터베이스와 관련된 경우 잠그거나 모든 요청을 대기열에 넣고 하나씩 처리하세요
생각해보니 두 가지를 써야 하는데 하나는 입장 시간과 퇴장 시간이에요.
접근은 시작 시간을 쓰기 시작하고, 나가면 종료 시간을 씁니다.
첫 번째 방문이 확실히 비어 있다고 가정하고 start=02:26:30 end=02:26:50
그런 다음 다시 방문을 시작할 때 다음과 같이 판단합니다.
< start>end, 접속
도중 또 다른 상황이 발생했다는 뜻, 즉 접속이 중단되어 종료 시간을 쓸 시간이 없으므로 여기서 start>end&&start 등 초기화 판단을 해야 합니다. -end> ;100 end를 현재 시간으로 직접 변경하면 액세스가 가능합니다.
<2> start
는 데이터베이스를 이용하여 처리할 수 있습니다. 사용자가 요청을 입력하면 먼저 데이터베이스를 확인하세요. 标识
은 실행되지 않습니다.
标识
실제 요구사항이 무엇인지가 문제입니다. API 관점에서 설명하지 않는 것이 더 간단할 수도 있습니다.
질문하신 내용으로 볼 때 부정행위에 대한 해결책을 마련했어야 했습니다. 원래 요구 사항을 명시하는 것이 좋습니다.
1. Mysql을 사용하는 경우 요청이 완료된 후 다른 요청이 실행되기 전에 잠금을 해제해야 합니다.
2. 카운터에 하나를 추가하면 요청이 종료됩니다. 나중에 카운터를 지우려면 이 방법을 사용하는 것이 좋습니다.3. 또한 동일한 사용자의 각 요청이 완료되지 않으면 파일 세션 자체가 잠깁니다. , 다른 요청도 차단됩니다
파일을 입력한 후 파일 잠금을 사용하여 작업이 완료된 후 파일을 잠금 해제하세요. 다음 사용자가 계속해서 접속하고 잠글 수 있습니다