<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                近期再次分析了php session內部的執行流程,我將在這篇文章中簡要地概括出php內部關于session的執行步驟。 1. 首先php中的session其實就是作為一個擴展載入到php內核中的。我們可以將它理解成一個擴展就可以了。當session擴展被載入時,php會調用內部核心函數來獲取處理session的save_handler - 也就是存儲讀取session數據的接口類或者函數。 Php默認地是通過寫或者讀取文件來處理session數據的。但是,php也提供了user自定義的方式 - 也就是自定義處理session數據的接口,可以通過session_set_save_handler函數來注冊。關于這方面,后續我會詳細寫一篇文章。同時,php會判斷session.auto_start是否已經在配置中默認開啟。如果開啟了session.auto_start,PHP便會調用內部函數自動開啟Session功能。以上,就是session擴展被載入時php內部所處理的兩件事情。 2. 接下來,php在啟動session的時候,如果發現請求的Cookies,Get,Post中不存在session id,說明這是客戶端的第一次訪問,php會自動調用php_session_create_id函數創建一個唯一的session id,并且在http response中通過set-cookie頭部發送給客戶端保存(在客戶端cookie被禁用的情況下,php也可以自動將session id添加到url參數中以及form的hidden 字段中,這需要將php.ini中的session.use_trans_sid設為開啟,也可以在運行時調用ini_set來設置這個配置項)。相反,如果請求中已經攜帶了session id,那么php會做以下幾件事情: 3. 從cookie中獲取Session ID 4. 調用save_handler的open接口打開存儲上下文 5. 如果讀取不到對應的session id, 生成新的Session Id 6. 注冊$_SESSION和$_HTTP_SESSION_VARS全局變量,$_SESSION和$_HTTP_SESSION_VARS會被注冊為同一個數組 7. 接著調用save_handler的read接口讀取Session數據,如果是使用files方式存儲的話,就從文件中讀取Session數據,數據庫方式的話,就從數據庫中讀取。 讀取完畢后會把讀到的數據寫入到$_SESSION數組中 8. 最后,當一個請求執行完畢時,php會調用內部函數獲取$_SESSION數組中的值,然后調用php_session_encode將其系列化后,通過調用save_handler的write接口將session系列化數據存儲起來。 以上大致按照順序列出了php session的內部執行流程。至于php的源代碼,我想就不貼出來了。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看