程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> PHP調用session_start後頁面始終加載的問題研究

PHP調用session_start後頁面始終加載的問題研究

編輯:關於PHP編程

本文章來給大家介紹一篇PHP調用session_start後頁面始終加載的問題研究,有需要的朋友可參考。一個PHP頁面的執行時間比較長(15秒左右),而只要這個頁面沒有執行完畢,其他的頁面訪問都是長時間加載狀態,只有那個頁面執行完畢了,剩下的頁面才能打開。 這是什麼情況呢,經過查看,兩個頁面都設計到了SESSION操作,示例代碼如下: 頁面一: 點擊查看原圖 頁面二:  點擊查看原圖 訪問頁面一地時候同時訪問頁面二,你會發現頁面二會一直保持加載狀態直到頁面一執行完畢。 問題的原因是什麼呢? 答案是PHP的SESSION機制在作怪,PHP只會在頁面代碼執行完畢之後才會把SESSION數據寫入到文件中,頁面不執行完畢,對應的SESSION文件一直都保存著鎖定狀態,而其他的頁面要訪問這個SESSION文件就只能保持等待狀態,這就是為什麼頁面二需要等待頁面一執行完畢之後才執行。   知道原因後,我們應該如何解決這個問題呢? 答案很簡單,PHP已經在內核中提供了相關接口:函數 session_write_close
函數官方文檔的描述如下: Session data is usually stored after your script terminated without the need to call session_write_close(), but as session data is locked to prevent concurrent writes only one script may operate on a session at any time. When using framesets together with sessions you will experience the frames loading one by one due to this locking. You can reduce the time needed to load all the frames by ending the session as soon as all changes to session variables are done. Session數據通常在你的腳本結束後自動保存而不需要調用session_write_close函數。但是session為了避免數據被同時寫入將文件鎖定住以保證每次只有一個腳本可以訪問文件。當你在用框架頁面同時訪問SESSION的時候將會遇到因為文件鎖定而出現的框架持續加載情況。你可以在處理完SESSION變量後立即使用這個函數減少多個框架的加載時間。   像前面的問題,我們可以直接在操作完SESSION數據後調用session_write_close函數立即寫入session數據,這樣就不會影響到其他頁面的正常運行。代碼如下: 點擊查看原圖  

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved