Cookie 從哪裡來,網站用它來幹嘛?
1. 什麼是Cookie,它的用途是什麼?
Cookies是一些存儲在用戶電腦上的小文件。它是被設計用來保存一些站點的用戶數據,這樣能夠讓伺服器為這樣的用戶定製內容,後者頁面代碼能夠獲取到Cookie值然後發送給伺服器。比如Cookie中存儲了所在地理位置,以後每次進入地圖就默認定位到改地點即可。
2. 通過什麼方式能獲取到Cookie的內容,我能查看自己電腦上的Cookie嗎?
能通過Web Server或者客戶端瀏覽器來獲取到Cookie。多數瀏覽器能夠配置允許用戶訪問Cookies,但是注意不同的站點之間的Cookie是不能共享的。打開Chrome的調試窗口可以在Resource的Cookie側邊欄查看,或者在console中輸入document.cookie來查看,這屬於在電腦上行查看,另外一種伺服器中查看可見後面的例子。
3. Cookie是什麼時候生成的,完整的生成、傳遞和使用過程是怎麼樣的?
寫數據到Cookie中通常是在一個頁面被載入的時候,比如提交按鈕被按下,後台處理完請求跳轉到相應頁面後會把Cookie值帶回來,如下是一個例子:
* 你在瀏覽器地址欄輸入了一個站點,然後瀏覽器會發送請求到站點的Web伺服器請求該頁面
* 與此同時,瀏覽器會在個人電腦上行查找和該站點對應的Cookie文件,如果發現了就會把裡面的鍵值對內容全部發送給Web伺服器,如果沒找到則不發送。* 頁面伺服器接收到了Cookie的數據後,可以利用這些數據決定返回到前台的內容(更進一步是跟Session結合使用)* 如果沒鍵值對被Web伺服器接收到,站點就知道該用戶沒有訪問過,就會為這個訪問地址新建一個ID並且發送一些鍵值對給前台,這些值會被放在這次響應中的Header帶給瀏覽器,瀏覽器端於是有了Cookie的值* 任何到服務的訪問和數據請求都可能很對Cookie中的鍵值對進行修改4. 一個簡單的使用Cookie例子。
以python的項目flasky(一個python框架Flask的示例項目,內含完整的開發代碼路徑)為例,將使用git代碼checkout到3b的歷史節點,配置環境啟動並確保http://127.0.0.1:5000/訪問成功。
將代碼hello.py修改如下:@app.route(/)
def index():
try:
print answer = , request.cookies.get(answer)
response = make_response(&This document carries a cookie!&
)
if request.cookies.get(answer) == None:
response.set_cookie(answer, 42)
else:
response.set_cookie(answer, (request.cookies.get(answer) + +))
except Exception, e:
print e
finally:
return response
在服務端代碼中獲取Cookie值,如果沒有設置過就設置為「42」,否則就在原來的基礎上增加「+」。每次刷新頁面,可以看到後台列印的內容不停的累加「+」,瀏覽器中查看answer的值也一直在累加:
5. 使用Cookie存在的一些問題?
* 多個用戶公用一台電腦比如網吧,那麼前一個人登陸購物網站併購買物品,後一個人可以使用前一人的賬號進行購物。
* 清除瀏覽器緩存等操作可以擦出掉Cookie,因而很難恢復之前做過的操作,要查看添加到購物車商品幾乎不可能。
這也是為什麼需要使用賬號登陸的原因,只要登陸過就能把所有記錄跟後台資料庫中的賬號強關聯起來。
整理和學習居多,如有不準確,還請指正。
參考來源:What are CookiesHow Internet Cookies Work已經寫得挺好的了。
有1處可能需要修改,原因是描述得不夠具體:5. 使用Cookie存在的一些問題?的第2段落中,"清除瀏覽器緩存等操作可以擦出掉Cookie"這句話需要再細化。"清除瀏覽器緩存"與"清除Cookie"是2個操作,因此"清除瀏覽器緩存"是不會對Cookie產生影響的。這句話中你帶了一個"等"字,懂的人自然懂,但是容易使初學者在理解上有所誤差。
"清除瀏覽器緩存"實際上是指"清除臨時文件",和Cookie沒有關係。每個瀏覽器都有屬於自己的"臨時文件",這個"臨時文件"在本地電腦存放的路徑(也就是指存放在比如C盤/A文件夾/B文件夾)是不同的。推薦閱讀:
※B 站又雙叒出問題了?淡定,往這兒看……
※世界主要國家的商業進口
※求具體解釋永恆之藍傳播過程?
※為什麼國內大學計算機學科不設置 Web 前端相關課程?