이 글은 세션 잠금을 기반으로 한 세션 잠금 방법을 주로 소개하며, 요청 차단을 방지하기 위한 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()
🎜rrreee🎜이 기술은 특히 처리하는 데 시간이 오래 걸리는 스크립트에 매우 유용합니다. 그리고 이 기능은 쓰기 세션만 닫고 읽기는 여전히 가능합니다. 🎜
🎜rrreee🎜🎜🎜번역 참고: 🎜🎜🎜🎜php5.4 이후, session_set_save_handler
는 SessionHandlerInterface🎜, 두 번째 매개변수는 콜백 메서드로 session_write_close()
를 지정하고(기본값은 true) session_write_close()
함수를 register_shutdown_function()으로 등록합니다. )
함수입니다.
🎜🎜Memcache나 Redis를 세션 저장용으로 사용하면 "잠금" 문제를 해결할 수 있지만, 잘못 처리하면 연결 수가 많아지게 됩니다(세션 작업 후 시간이 많이 걸리는 작업이 있는 경우 연결이 되지 않습니다). 재활용됩니다. 세션 쓰기 작업이 완료된 후 session_write_close()
작업을 적극적으로 수행할 수 있습니다🎜
위 내용은 요청 차단을 방지하기 위한 PHP의 세션 잠금 분석 예의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!