PHP編程中的Session阻塞問題與解決方法分析
本文實(shí)例講述了PHP編程中的Session阻塞問題與解決方法。分享給大家供大家參考,具體如下:
使用session過程中,在開啟session后,同一瀏覽器,執(zhí)行同一程序,不同頁面會被鎖。不同瀏覽器不會出現(xiàn)這種情況。
疑問:是不是session_start導(dǎo)致了阻塞?
于是,我寫了幾個頁面測試了一下,發(fā)現(xiàn)是session導(dǎo)致了阻塞,而其他兩種情況不會造成阻塞。
查了下PHP的Bug列表,發(fā)現(xiàn)有人提出了這個問題:
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官方的回復(fù)是:
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.
結(jié)合了PHP的Session機(jī)制,找到了阻塞的原因。由于PHP的Session信息是寫入文件的,1個客戶端占有1個session文件。因此,當(dāng) session_start被調(diào)用的時候,該文件是被鎖住的,而且是以讀寫模式鎖住的(因?yàn)槌绦蛑锌赡芤薷膕ession的值),這樣,第2次調(diào)用 session_start的時候就被阻塞了。
最簡解決方法:
查了PHP的手冊,發(fā)現(xiàn)一個session_write_close函數(shù),作用是Write session data and end session,也就是寫session的數(shù)據(jù),同時關(guān)閉這個session。因此,我們可以在用完session之后,調(diào)用這個函數(shù)關(guān)閉session 文件即可解除鎖定。一般,session是用來記錄用戶身份信息的,以便PHP進(jìn)行身份認(rèn)證,因此完全可以將session的讀寫放在頁面剛開始執(zhí)行的時 候,在執(zhí)行完以后,馬上調(diào)用session_write_close函數(shù)即可。
更多關(guān)于PHP相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《PHP中cookie用法總結(jié)》、《PHP數(shù)組(Array)操作技巧大全》、《PHP基本語法入門教程》、《PHP運(yùn)算與運(yùn)算符用法總結(jié)》、《php面向?qū)ο蟪绦蛟O(shè)計(jì)入門教程》、《PHP網(wǎng)絡(luò)編程技巧總結(jié)》、《php字符串(string)用法總結(jié)》、《php+mysql數(shù)據(jù)庫操作入門教程》及《php常見數(shù)據(jù)庫操作技巧匯總》
希望本文所述對大家PHP程序設(shè)計(jì)有所幫助。
相關(guān)文章
php中選擇什么接口(mysql、mysqli)訪問mysql
我們知道,mysqli是PHP 5中新提供的MySQL接口,此接口使用了面向?qū)ο蟮乃枷?。使用mysqli接口的代碼可讀性更強(qiáng),其執(zhí)行效率比mysql接口高2013-02-02
用Zend Studio+PHPnow+Zend Debugger搭建PHP服務(wù)器調(diào)試環(huán)境步驟
作為一名非專業(yè)的PHP開發(fā)者,想要較方便地讀懂并搞清楚一個PHP功能模塊的運(yùn)行細(xì)節(jié),搭建一個PHP調(diào)試環(huán)境,然后單步調(diào)試程序,以掌握程序的整個運(yùn)行過程顯的尤為重要2014-01-01
解析PHP中DIRECTORY_SEPARATOR,PATH_SEPARATOR兩個常量的作用
本篇文章是對PHP中DIRECTORY_SEPARATOR,PATH_SEPARATOR兩個常量的作用進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-06-06
php 移除數(shù)組重復(fù)元素的一點(diǎn)說明
PHP中移除數(shù)組重復(fù)元素用的函數(shù)是array_unique2008-11-11
PHP使用CURL實(shí)現(xiàn)下載文件功能示例
這篇文章主要介紹了PHP使用CURL實(shí)現(xiàn)下載文件功能,結(jié)合具體實(shí)例形式分析了php基于curl的文件下載實(shí)現(xiàn)技巧,代碼注釋有詳細(xì)的功能說明,并附帶了curl參數(shù)的功能講解,需要的朋友可以參考下2019-06-06
PHP文件運(yùn)行步驟以及數(shù)據(jù)庫的連接代碼
PHP經(jīng)常搭配MySQL來使用,那么PHP怎樣連接MySQL數(shù)據(jù)庫呢?這篇文章主要給大家介紹了關(guān)于PHP文件運(yùn)行步驟以及數(shù)據(jù)庫連接的相關(guān)資料,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下2022-11-11
php通過pecl方式安裝擴(kuò)展的實(shí)例講解
下面小編就為大家分享一篇php通過pecl方式安裝擴(kuò)展的實(shí)例講解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-02-02

