php最佳化session的使用

來源:互聯網
上載者:User
php的session擴充可以將session資料存入任意容器,只要容器實現了php_session.h中的介面:

typedef struct ps_module_struct {const char *s_name;int (*s_open)(PS_OPEN_ARGS);int (*s_close)(PS_CLOSE_ARGS);int (*s_read)(PS_READ_ARGS);int (*s_write)(PS_WRITE_ARGS);int (*s_destroy)(PS_DESTROY_ARGS);int (*s_gc)(PS_GC_ARGS);char *(*s_create_sid)(PS_CREATE_SID_ARGS);} ps_module;

如果在php.ini中定義了session.auto_start = 1,session擴充在請求初始化階段(rinit)會調用s_open並s_read資料。
如果在php頁面中調用了session_start()(只有第一次調用生效),session擴充也會調用s_open並s_read資料。
但是對於一些涉及不到session資料的頁面,如果也去讀取session資料會造成效能上的浪費,如磁碟操作或網路操作。
所以要想個辦法對涉及session資料和不涉及session資料的頁面區別對待,但是處理代碼需要是一致的。
想的辦法就是去掉session.auto_start = 1改成session.auto_start = 0並對cookie中沒有session_name的請求延遲調用session_start(),
如果cookie中沒有session_name,調用session_start()時,session擴充會自動產生一個session_id並發送Set-Cookie頭,頭資訊的輸出要在頁面輸出內容前或者把頁面內容放入輸出緩衝延遲輸出。
最終的實現方式如下:
auto_prepend_file:


auto_append_file:

以上就介紹了php最佳化session的使用,包括了方面的內容,希望對PHP教程有興趣的朋友有所協助。

  • 聯繫我們

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