> 백엔드 개발 > PHP 튜토리얼 > 요청 차단을 방지하기 위한 PHP의 세션 잠금 분석 예

요청 차단을 방지하기 위한 PHP의 세션 잠금 분석 예

黄舟
풀어 주다: 2023-03-14 18:56:01
원래의
1329명이 탐색했습니다.

이 글은 세션 잠금을 기반으로 한 세션 잠금 방법을 주로 소개하며, 요청 차단을 방지하기 위한 phpsession 잠금 사용 및 관련 작업 기술을 예제 형식으로 분석합니다.

이 글을 참조하세요. 세션 잠금을 기반으로 하는 PHP의 예를 통해 요청 차단을 방지합니다. 참조를 위해 모든 사람과 공유하십시오. 세부 사항은 다음과 같습니다.

설명:

이전 기사 PHP 프로그래밍의 세션 차단 문제 및 솔루션에서는 PHP 세션 차단에 대한 솔루션을 간략하게 분석했습니다. 여기에 또 다른 솔루션이 있습니다.

텍스트:

최신 브라우저는 호스트에 대한 동시 연결 수를 일반적으로 4 또는 6으로 제한합니다. 이는 웹 페이지가 동일한 호스트에서 수십 개의 Assert 파일(js, 이미지, CSS)을 로드하는 경우 동시성 제한으로 인해 대기열이 발생한다는 것을 의미합니다. 동일하거나 더 나쁘게도 이 문제는 세션을 사용하는 PHP 스크립트에서도 발생합니다.

질문:

php 세션은 기본적으로 파일에 저장됩니다. 세션을 작동해야 하는 PHP 파일(session_start())을 요청할 때 이 파일이 첫 번째로 저장됩니다. 세션을 운영하는 프로세스가 잠겨 다른 요청이 차단됩니다. 다른 요청은 세션 파일이 잠금 해제될 때까지 session_start()에서 일시 중지됩니다. session_start())时,这个文件是会被第一个操作session的进程锁定,导致其他请求阻塞。其他请求会挂起在session_start()直到session文件解锁。

解决:

由于锁定的session文件直到脚本执行结束或者session正常关闭才会解锁,为了防止大量的php请求(需要使用$_SESSION数据)被锁定,可以在写完session后马上关闭,这样就释放了锁。

关闭session:


session_write_close();
로그인 후 복사

这个技巧非常管用,尤其对于一个处理时间长的脚本。并且这个函数只是关闭了写session,读还是可以的。


// 
session_start();
//可以读写session
$_SESSION['latestRequestTime'] = time();
//关闭session
session_write_close();
//读取session
$twitterId = $_SESSION['twitterId'];
로그인 후 복사

译注:

在php5.4以后,session_set_save_handler 支持了传递SessionHandlerInterface 的方式,第二个参数就是指定session_write_close() 作为回调方法的(缺省就是true),将函数 session_write_close() 注册为 register_shutdown_function() 函数。

用Memcache或者Redis做session的存储,是能解决“锁定”的问题,但处理不好会导致连接数标高(在session操作后如果有耗时操作,连接是不回收的,可以主动在session写操作完成后做session_write_close()

🎜🎜해결책: 🎜🎜🎜🎜잠긴 세션 파일은 스크립트 실행이 끝나거나 세션이 정상적으로 닫힐 때까지 잠금이 해제되지 않으므로 많은 수의 PHP 요청($_SESSION 데이터 사용이 필요함)을 방지하기 위해 )이 잠겨 있는 경우 Close 직후에 세션을 작성하여 잠금을 해제할 수 있습니다. 🎜🎜세션 닫기:🎜


🎜rrreee🎜이 기술은 특히 처리하는 데 시간이 오래 걸리는 스크립트에 매우 유용합니다. 그리고 이 기능은 쓰기 세션만 닫고 읽기는 여전히 가능합니다. 🎜


🎜rrreee🎜🎜🎜번역 참고: 🎜🎜🎜🎜php5.4 이후, session_set_save_handlerSessionHandlerInterface🎜, 두 번째 매개변수는 콜백 메서드로 session_write_close()를 지정하고(기본값은 true) session_write_close() 함수를 register_shutdown_function()으로 등록합니다. ) 함수입니다.
🎜🎜Memcache나 Redis를 세션 저장용으로 사용하면 "잠금" 문제를 해결할 수 있지만, 잘못 처리하면 연결 수가 많아지게 됩니다(세션 작업 후 시간이 많이 걸리는 작업이 있는 경우 연결이 되지 않습니다). 재활용됩니다. 세션 쓰기 작업이 완료된 후 session_write_close() 작업을 적극적으로 수행할 수 있습니다🎜

위 내용은 요청 차단을 방지하기 위한 PHP의 세션 잠금 분석 예의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿