由於HTTP協定是無狀態的協議,所以當服務端需要記錄使用者的狀態時,就需要用某種機制來識具體的用戶,這個機制就是Session.典型的場景例如購物車,當你點擊下單按鈕時,由於HTTP協議無狀態,所以並不知道是哪個用戶操作的,所以服務端要為特定的用戶創建了特定的Session,用用於標識這個用戶,並且追蹤用戶,這樣才知道購物車裡面有幾本書。這個Session是保存在服務端的,有一個唯一識別。在服務端保存Session的方法很多,記憶體、資料庫、檔案都有。集群的時候也要考慮Session的轉移,在大型的網站,一般會有專門的Session伺服器集群,用來保存用戶會話,這個時候 Session 資訊都是放在記憶體的,使用一些快取服務像是Memcached之類的來放 Session。
session儲存在服務端,那麼客戶端上的資訊如何快速與服務端相符呢(有很多時候,當你登入某個網站後,下次登入的時候就不用再輸入使用者名稱和密碼了,這就是cookie的作用)。每次HTTP請求的時候,客戶端都會傳送對應的Cookie訊息到服務端。實際上大多數的應用程式都是用Cookie 來實作Session追蹤的,第一次建立Session的時候,服務端會在HTTP協定中告訴客戶端,需要在Cookie 裡面記錄一個Session ID,以後每次要求把這個會話ID傳送到伺服器,我就知道你是誰了。有人問,如果客戶端的瀏覽器停用了 Cookie 怎麼辦?一般這種情況下,會使用一種叫做URL重寫的技術來進行會話跟踪,即每次HTTP交互,URL後面都會被附加上一個諸如 sid=xxxxx 這樣的參數,服務端據此來識別用戶。
Cookie其實還可以用在一些方便使用者的場景下,設想你某次登陸過一個網站,下次登入的時候不想再輸入帳號了,怎麼辦?這個資訊可以寫到Cookie裡面,造訪網站的時候,網站頁面的腳本可以讀取這個訊息,就自動幫你把用戶名給填了,能夠方便一下用戶。這也是Cookie名稱的由來,給使用者的一點甜頭。
Session是在服務端保存的資料結構,用來追蹤(標識)使用者的狀態,這個資料可以保存在叢集、資料庫、檔案中;
Cookie是客戶端保存使用者資訊的一種機制,用來記錄使用者的一些訊息,也是實現Session的一種方式。
1,session 在伺服器端,cookie 在客戶端(瀏覽器)
2,session 預設被存在在伺服器的一個檔案裡(不是記憶體)
3,session 的運行依賴session id,而session id 是存在cookie 中的,也就是說,如果瀏覽器禁用了cookie ,同時session 也會失效(但是可以透過其它方式實現,例如在url 中傳遞session_id)
4,session 可以放在檔案、資料庫、或記憶體中都可以。
5,使用者驗證這種場合一般會用session 因此,維持一個會話的核心就是客戶端的唯一標識,即session id
cookie 和session 的區別:
1、 cookie資料存放在客戶的瀏覽器上,session資料放在伺服器上。
2、cookie不是很安全,別人可以分析存放在本地的COOKIE並進行COOKIE欺騙
考慮到安全應當使用session。
3、session會在一定時間內保存在伺服器上。當訪問增多,會比較佔用你伺服器的效能
考慮到減輕伺服器效能方面,應使用COOKIE。
4、單一cookie儲存的資料不能超過4K,很多瀏覽器都限制一個網站最多儲存20個cookie。
5、所以個人建議:
將登陸資訊等重要資訊存放為SESSION
其他資訊如果需要保留,可以放在COOKIE中
以上是cookie和session的關係的詳細內容。更多資訊請關注PHP中文網其他相關文章!