php session阻塞頁面分析及最佳化 (session_write_close session_commit使用)

來源:互聯網
上載者:User

標籤:des   style   blog   http   io   color   ar   os   使用   

轉: http://www.tuicool.com/articles/bqeeey

首先看下下面代碼, session1.php 檔案

<?phpini_set(‘session.save_path‘, ‘./tmp/‘);function open($save_path, $session_name) {    echo __FUNCTION__,"<br/>";    return (true);}function close(){    echo __FUNCTION__,"<br/>";    return (true);}function read($id){    echo __FUNCTION__,"<br/>";}function write($id, $sess_data){        echo __FUNCTION__,"<br/>";    return (true);}function destroy($id){    echo __FUNCTION__,"<br />";      return(true);}function gc($maxlifetime){    echo __FUNCTION__,"<br />";     return true;    }session_set_save_handler("open", "close", "read", "write", "destroy", "gc");register_shutdown_function(‘test‘);function test(){  echo __FUNCTION__,"<br />";}session_start();echo ‘aaaaa‘,"<br />";/*結論->session_start開啟後, 會自動執行open,read函數。等頁面執行完後,會執行shutdown函數.最後後會把session寫入進去,然後執行close關閉檔案從session_start 到頁面結束,會一直鎖定檔案或者保持串連的。*/

然後通過1個執行個體子來理解 , 先執行 session2.php 代碼, 20秒內執行 session3.php 

session2.php 檔案

<?php//執行 session2.php和session3.php, /*因為 session2.php 指令碼一直沒有結束,結束後 session才會執行寫入和關閉操作 (看session1.php 結論), session一直被鎖定了因此執行session3.php 時會發現 一直處於阻塞狀態。  *//*session_start();$_SESSION[‘uname‘] = ‘lily‘;sleep(20);*///如果用以下代碼 就沒問題了, 立即提交 寫入關閉session_start();$_SESSION[‘uname‘] = ‘lemon‘;session_commit();sleep(20);

session3.php 檔案

<?phpsession_start();echo $_SESSION[‘uname‘];

總結:

//可以用 session_commit (別名 session_write_close) 立即執行寫入關閉 /*session_start();$_SESSION[‘aaaa‘] = 1000;session_commit();  //執行commit後,直接會調用,wirte,close操作*//*1.唯讀取session頁面,建議開啟後,就直接commit,這是$_SESSION變數已經產生了。2.有對session進行寫入頁面,建議修改完$_SESSION後,直接調用commit3.多次開啟並且寫入,這個不建議使用,比較開啟檔案,寫入都是耗費時間的。如果能一次搞定的,就不要做多次了。 除非,中間執行很耗時的業務。後記:其實,使用完session,隨手commit也不是壞事,養成習慣後。可以節省效能,減少伺服器開銷。是個不錯選擇!歡迎大家交流!*/

 

php session阻塞頁面分析及最佳化 (session_write_close session_commit使用)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.