2010-09-24 72 views
11

由於會話和cookie都用於存儲臨時數據,它們之間有什麼區別?會話和cookie是同一件事嗎?

+0

Cookie是否必須是臨時的? – JeffO 2010-09-24 13:07:29

+0

@Jeff:Cookie往往會被刪除。將客戶端數據視爲永久存儲是危險的。 – Brian 2010-09-24 13:40:38

回答

5

在每個HTTP響應中,服務器都有機會添加標題Set-Cookie: {cookie-name}={cookie-data}; {cookie-options}

瀏覽器將在隨後的每個HTTP請求(或由選項指定)中添加標頭Cookie: {cookie-name}={cookie-data}

請求#1:

POST /auth/login HTTP/1.1 
Host: www.example.com 

username=Justice&password=pass1234 

響應#1:

HTTP/1.1 307 Temporary Redirect 
Set-Cookie: user_id=928 
Location: http://www.example.com/dashboard 

請求#2:

GET /dashboard HTTP/1.1 
Host: www.example.com 
Cookie: user_id=928 

響應#2:

HTTP/1.1 200 OK 
Content-Type: text/html 

<html> 
    <head>...</head> 
    <body>...</body> 
</html> 

所有未來的請求還將包含Cookie標題。

+0

作爲一個澄清,響應'Set-Cookie'頭中的選項決定*哪個*將來的請求包含'Cookie'頭,無論是後續的所有請求還是其中的某個子集。 – yfeldblum 2010-09-24 13:47:21

+1

這是可以接受的答案。雖然這是關於cookie如何誕生的一個很好的解釋(儘管不完整,因爲cookie也可以由JavaScript設置,因此跳過了「Set-Cookie」頭),但它甚至沒有提到會話! :) – 2010-09-24 18:57:02

+0

這是一個部分答案,但它是整個答案中最大的一部分。關於Cookie和會話之間的差異的混淆通常是由於混淆了cookie的具體含義。解釋餅乾和相關問題通常會被澄清。 – yfeldblum 2010-09-24 19:48:54

5

Cookie作爲文件系統(持久性cookie)或瀏覽器內存(非持久性cookie)上的小型文本文件存儲在客戶端中,並傳遞到服務器並通過每個請求和響應返回給客戶端。只要到期日還沒有通過,瀏覽器會話間的持久cookie仍然可用。一旦瀏覽器關閉,非持久性cookie將會丟失。
會話存儲在內存中的服務器上。 Cookie經常被用作保存請求之間用戶會話的引用的一種方式,但是如果在客戶端瀏覽器上禁用cookie,這也可以通過查詢字符串參數來完成。

+0

在內存中?? ___ – 2010-09-24 13:00:51

+1

@Alvaro G. Vicario - 記憶中。無論是在通過其Web服務器分配給應用程序的RAM中,還是在通過數據庫會話存儲的存儲內存中,還是在與會話狀態服務器相關的某些其他RAM /隔離存儲中。 – 2010-09-24 13:05:20

+0

顯然,他們可以在內存中 - http://www.cookiecentral.com/faq/#1.1 – JeffO 2010-09-24 13:05:45

5

Cookies存儲用戶的數據他們的電腦

會話實現會在服務器(或多個服務器,具體取決於配置)上存儲用戶的臨時數據。

1

Cookies是存儲在能夠容納特定領域的信息在客戶端上的小文本文件,

一個會話時,無論是內存,數據庫或一個單獨的服務器保持服務器端和鍵控通過會話密鑰,它們是隻意味着堅持一個'會話',因爲cookie可以持續一段時間或無限期地持續,因此可用於多個會話。

3

Cookie是客戶端,會話是服務器端

2

會話存儲在服務器端。您可以擁有inproc會話,這些會話將存儲在內存中,也可以將會話存儲在SQL數據庫中。你可以閱讀more here

Cookie存儲在客戶端的計算機上。這意味着不建議將重要細節存儲在cookie中,因爲客戶可以輕鬆操縱它們。

0

存儲在會話和cookie中的數據的主要區別在於存儲在會話中的數據存儲在服務器端(用戶不能操作這些數據),而cookie存儲在客戶端。他們可能會被用戶以某種方式操縱。如果你有一個非常敏感的數據 - 然後將它存儲在會話中。但是可以存儲在cookie中的所有其他數據不會使服務器超載。

+0

由於Cookie隨每個請求一起發送(即使對於圖像等,如果您沒有爲它們使用單​​獨的域或子域名),濫用cookie可能會花費大量額外帶寬。如果會話數據佔用太多空間,導致內存成爲問題,我想知道是否應該將數據填充到數據庫中,而不是想知道是否可以將其卸載到客戶端。 – Brian 2010-09-24 13:39:34

6

至於五月知識:

如果將該變量設置爲「曲奇」,那麼你的用戶就不必每次都要登錄他們進入你的社區時間英寸

cookie將留在用戶的瀏覽器內進行,直到被用戶刪除。

但是會話被廣泛使用,因爲有你的cookies的機會,如果用戶的瀏覽器安全設置設爲高被阻塞。

如果將該變量設置爲「會議」,那麼用戶活動將使用瀏覽器會話跟蹤,用戶必須登錄每次重新打開瀏覽器時間英寸此外,如果您使用的是「會話」變量,則需要通過將它放在Web根目錄上或通過請求您的Web主機將其設置爲不可瀏覽的目錄來保護「會話」目錄。

的主要區別將餅乾都存儲在硬盤中,而會話不會存儲在您的硬盤。會話基本上就像令牌一樣,它是在驗證時生成的。只要瀏覽器打開,會話就可用。

希望以下鏈接將進一步明確你的疑慮

http://wiki.answers.com/Q/What_is_the_difference_between_session_and_cookies http://www.allinterview.com/showanswers/74177.html

+1

請注意會話密鑰傾向於存儲在用戶的Cookie中。當網站需要確定某個特定頁面請求與哪個會話相對應時,通常會根據用戶的Cookie進行查找。 – Brian 2010-09-24 13:36:57

+0

非常感謝您的評論我不知道這一點。 – 2010-09-24 13:52:06

+0

可能發生的情況是,如果session不是kill,用戶不需要登錄.simlar到上面寫的cookie。那麼當cookies被殺死並且會話被終止時呢? – Shalni 2010-09-24 13:54:26

2

他們是不一樣的東西。會話是存儲單個用戶的瀏覽會話的狀態的概念。

Cookies是實現這一理念,因而「會話cookie」的普遍做法的一個很好的手段。