PHP session檔案獨佔鎖引起阻塞問題解決方案_PHP

來源:互聯網
上載者:User
關鍵字 PHP session檔案 獨佔鎖 阻塞
PHP預設的會話處理器是session.save_handler = files(即檔案)。如果同一個用戶端同時並發發送多個請求(如ajax在頁面同時發送多個請求),且指令碼執行時間較長,就會導致session檔案阻塞,影響效能。因為對於每個請求,PHP執行session_start(),就會取得檔案獨佔鎖,只有在該請求處理結束後,才會釋放獨佔鎖。這樣,同時多個請求就會引起阻塞。解決方案如下:

(1)修改會話變數後,立即使用session_write_close()來儲存會話資料並釋放檔案鎖。

session_start(); $_SESSION['test'] = 'test';session_write_close(); //do something

(2)利用session_set_save_handler()函數是實現自訂會話處理。

function open($savePath, $sessionName){  echo 'open is called';  return true;} function close(){  echo 'close is called';  return true;} function read($sessionId){  echo 'read is called';  return '';} function write($sessionId, $data){  echo 'write is called';  return true;} function destroy($sessionId){  echo 'destroy is called';  return true;} function gc($lifetime){  echo 'gc is called';  return true;} session_set_save_handler("open", "close", "read", "write", "destroy", "gc");register_shutdown_function ( 'session_write_close' ); session_start(); $_SESSION['foo'] = "bar";

當然,在 php 5.4.0之後,你可以通過實現 SessionHandlerInterface 介面或繼承 SessionHandler 類來使用。

class MySessionHandler extends SessionHandler {   public function __construct()  {  }   public function open($save_path, $session_id)  {  }   public function close()  {   }   public function create_sid()  {  }   public function read($id)  {  }   public function write($id, $data)  {  }   public function destroy($id)  {  }} $handler = new MySessionHandler(); //第2個參數將函數 session_write_close() 註冊為 register_shutdown_function() 函數。session_set_save_handler($handler, true);

你可以對上面的代碼進行具體實現和封裝,利用mysql或其它記憶體資料庫來管理會話資料。還能解決使用叢集
時,session資料共用問題。

  • 相關文章

    聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.