這篇文章主要介紹了PHP程式中的Session阻塞問題與解決方法,簡單分析了php session阻塞的原理、原因與簡單解決方法,需要的朋友可以參考下
本文實例講述了PHP程式設計中的Session阻塞問題與解決方法。分享給大家供大家參考,具體如下:
使用session過程中,在開啟session後,同一瀏覽器,執行同一程序,不同頁面會被鎖。不同瀏覽器不會出現這種情況。
問題:是不是session_start導致了阻塞?
於是,我寫了幾個頁面測試了一下,發現是session導致了阻塞,而其他兩種情況不會造成阻塞。
查了下PHP的Bug列表,發現有人提出了這個問題:
#Description:
------------
Calling session_start() appears to wait until other scripts have exited
##that are using the same session. My guess is the 1st request locks the session file for exclusive use and the second request blocks until it
can open it.
Thank you for taking the time to write to us, but this is not a bug.This is expected, the session file is locked to avoid corruption.
結合了PHP的Session機制,找到了阻塞的原因。由於PHP的Session資訊是寫入檔案的,1個客戶端佔有1個session檔。因此,當session_start被呼叫的時候,該檔案是被鎖住的,而且是以讀寫模式鎖住的(因為程式中可能要修改session的值),這樣,第2次呼叫session_start的時候就被阻塞了。
最簡解決方法:
查了PHP的手冊,發現一個session_write_close函數,作用是Write session data and end session,也就是寫session的數據,同時關閉這個session。因此,我們可以在用完session之後,呼叫這個函數關閉session 檔案即可解除鎖定。一般,session是用來記錄使用者身分資訊的,以便PHP進行身份認證,因此完全可以將session的讀寫放在頁面剛開始執行的時 候,在執行完以後,馬上調用session_write_close函數即可。以上是php中Session阻塞問題的解決方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!