首頁  >  文章  >  後端開發  >  php中Session阻塞問題的解決方法

php中Session阻塞問題的解決方法

黄舟
黄舟原創
2017-08-08 09:41:241385瀏覽

這篇文章主要介紹了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.

PHP官方的回覆是:

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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn