關於PHP對話:session和cookie

來源:互聯網
上載者:User
關於PHP會話:session和cookie

會話處理解決什麼問題

HTTP(超文字傳輸通訊協定 (HTTP))定義了通過全球資訊網(WWW)傳輸文本、圖形、視頻和所有其他的資料的規則。HTTP是一種無狀態協議,每次請求的處理,都與之前和之後的請求無關。

會話處理是這種無狀態問題的解決辦法。它的實現方式是為每一位網站訪問者分配一個稱為會話ID(SID)的唯一標誌屬性,然後將此SID與任意數量的資料關聯。

會話處理流程

  1. 瀏覽器向伺服器發送請求
  2. 伺服器為訪客建立會話ID(SID),通常SID儲存在伺服器端一個檔案中。
  3. 儲存在用戶端($_COOKIE[‘PHPSESSID’]或者url參數)
  4. 瀏覽器再次向伺服器發送請求
  5. 伺服器通過讀取cookie(或者url的參數)來驗證SID是否依然同一次會話
  6. 離開網站,會話結束

問題

SID是如何被寫到cookie中去?

PHP 會話啟動以後,會給每個訪客分配一個SID,這個SID同時會寫到用戶端的cookie中去,預設cookie變數名為:PHPSESSID。這裡說同時是不確切的因為下頁代碼只會在重新整理頁面以後,才能取到cookie:

session_start();echo('SID:'.session_id().'');echo('Cookie_sid:'.$_COOKIE['PHPSESSID'].'');

cookie被禁用了,session會不會同時失效?

在沒有做任何準備的情況下,用戶端禁用cookie確實會讓session失效。書上(PHP與MySQL程式設計 第三版)說,用戶端儲存SID的方式有兩種,一種是cookie,一種是重寫URL來傳遞。可以在php.ini檔案中更改session.use_trans_sid的值,來實現url的自動重寫,但筆者沒有做測試。

會話在伺服器端的儲存方式

預設情況下,session 以檔案方式儲存在伺服器上。在php.ini檔案中可做相關設定:

session.save_handler=files session.save_path = "N;MODE;/path"

save_handler值有四個:

  1. files 一般檔案
  2. mm 共用記憶體
  3. sqlite SQLite資料庫
  4. user 使用者自訂函數

通過user方式,可以用自訂函數與會話配合,看上去功能很強大。但沒時間去實操。有空再研究。

著作權聲明:本文為博主原創文章,未經博主允許不得轉載。

  • 聯繫我們

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