通俗易懂講解cookie和session的用法用途,執行流程,區別聯絡以及常見問題
前言:
本篇文章是以實際生產中遇到的問題為導向寫的,所以在體系上沒有那麼詳細。請各位看官多多包涵,若有不當之處歡迎批評指正。
1.為什麼要有cookie/session?
在客戶端瀏覽器向伺服器傳送請求,伺服器做出響應之後,二者便會斷開連線(一次會話結束)。那麼下次使用者再來請求伺服器,伺服器沒有任何辦法去識別此使用者是誰。比如web系統常用的使用者登入功能,如果沒有cookie機制支援,那麼只能通過查詢資料庫實現,並且要命的是每次重新整理頁面都要重新輸入表單資訊查詢一次資料庫才可以識別使用者,這會給開發人員帶來大量冗餘工作並且簡單的使用者登入功能會給伺服器帶來巨大的壓力。
在此背景下,就急需一種機制來解決此問題。分析可知,以上需求的實現就要客戶端每次訪問伺服器時從客戶端帶上一些資料(相當於身份證)告知伺服器自己是誰。這個資料就是cookie!並且客戶端訪問伺服器時不能將所有cookie都帶過去,比如訪問百度就不能把谷歌的cookie帶給百度,這個設定方式在後面介紹。
那麼有了cookie,為什麼還要有session呢?有了cookie可以向伺服器證明使用者身份了,我們的web系統中是不是需要將使用者的詳細資訊儲存在某個位置供頁面呼叫呢?使用者的詳細資訊就包括姓名,年齡,性別等資訊。而cookie是存在於客戶端的,將使用者詳細資訊通過網路傳送到客戶端儲存是極不安全的。且cookie大小不能超過4k,不能支援中文。這就限制cookie不能滿足儲存使用者資訊的需求。這就需要一種機制在伺服器端
總而言之,cookie/session的出現就是為了解決http協議無狀態的弊端,為了讓客戶端和服務端建立長久聯絡而出現的。
2.什麼是會話技術?
幫你儲存一些在互動過程臨時產生的資料
當你開啟瀏覽器,訪問一個網站,認為會話開始了,當你關閉瀏覽器的時候,會話結束了
3.cookie/session執行流程(這才是重點)
cookie執行流程
當你去訪問應用的時候,來到伺服器。伺服器設定一個cookie(後邊介紹api),在做響應的時候會通過set-cookie響應頭將cookie帶給瀏覽器。
來到瀏覽器,瀏覽器會將此資料儲存起來,接下來再次去訪問伺服器的時候,瀏覽器會根據cookie的path屬性
session執行流程
瀏覽器發起一個請求到伺服器,伺服器先檢查你是否攜帶了一個叫做JSESSIONID的cookie。
如果有攜帶,會將此cookie的值取出來(比如為aaa123),然後從伺服器的session池中找到ID為aaa123的session返回給呼叫者。
如果沒有攜帶這個JSESSIONID的cookie,那麼伺服器將會自動建立一個session物件並且生成一個隨機字串(如aaa123)作為此session的ID儲存到session池中。在伺服器為客戶端瀏覽器作響應的時候自動建立一個鍵為“JSESSIONID” 值為“aaa123”的cookie物件讓瀏覽器儲存起來以便下次再訪問的時候帶過來。
4.cookie的常用屬性api
Cookie cookie = new Cookie("name","tom"); // 新建Cookie
cookie就是鍵值對的資料,如果是中文不能直接設定,需要編碼
cookie.setDomain("www.baidu.com"); // 設定域名
這樣設定域名的話,該cookie會被提交到www.baidu.com但是不會被提交到zhidao.baidu.com。要想都提交過去,需要這樣設定cookie.setDomain(".baidu.com");
cookie.setPath("/search"); // 設定路徑
這樣設定路徑,該cookie只會被提交到www.baidu.com/search路徑下的頁面,也就是說在www.baidu.com/aaa下的頁面是獲取不到該cookie的。一般cookie在某個網站裡都是可用的,直接設定為/,cookie.setPath("/");
cookie.setMaxAge(60*60*24*7); // 設定有效期
MaxAge屬性單位為秒,預設為-1也就是關閉瀏覽器自動銷燬。cookie.setMaxAge(60*60*24*7); 這樣設定意思是不管瀏覽器關閉與否,將此cookie持久化到客戶端檔案裡儲存一週。引數為正數時瀏覽器都會將相應的cookie做持久化處理。
response.addCookie(cookie); // 輸出到客戶端
5.session常用api
HttpSession session = request.getSession(); // 建立session
session.setAttribute("name","tom"); // 設定Session屬性
out.println("歡迎您:" +session.getAttribute("name")); // 獲取Session屬性
在tomcat配置檔案中配置session的超時時間
<session-config>
<session-timeout>分鐘為單位</session-timeout>
</session-config>
6.cookie/session的區別與聯絡
區別:
1.cookie存放在客戶端,session存放在伺服器端。
2.cookie只能存放4k的資料,而session理論上沒有做限制
聯絡:
session雖說存放在伺服器端,但是仔細看剛才的執行流程你會明白,session是依賴於cookie的,這一點也是本篇文章想要著重強調的
7.cookie/session使用注意事項
1.cookie大小有限制 4k
2.cookie不能跨瀏覽器
3.cookie不支援中文
4.如果是安全性較高的資料應存放在session中,因為cookie存放在客戶端總會輕易被不法分子獲取
5.如果是訪問量特別大的網站,儘量不要在session中儲存使用者資料,因為每個使用者存一個session會給伺服器造成很大的壓力
8.新手使用session時常踩的坑
很多人使用session時希望使用者資訊可以儲存一段時間比如儲存7天,於是配置了Tomcat的
<session-config>
<session-timeout>7天</session-timeout>
</session-config>。
配置完後發現,關閉瀏覽器後再訪問還是取不到session。這是因為session的配置沒起作用嗎?不是的,其實session還是存在於伺服器的,只是沒有設定cookie持久化,cookie預設就會在瀏覽器關閉時銷燬,所以叫做JSESSIONID的cookie也被銷燬了,再到伺服器的時候沒有這個叫JSESSIONID的cookie就取不到相關的session了。
所以,如果想7天內都能訪問到session,需要將cookie也設定持久化!
相關推薦
通俗易懂講解cookie和session的用法用途,執行流程,區別聯絡以及常見問題
前言: 本篇文章是以實際生產中遇到的問題為導向寫的,所以在體系上沒有那麼詳細。請各位看官多多包涵,若有不當之處歡迎批評指正。 1.為什麼要有cookie/session? 在客戶端瀏覽器向伺服器傳送請求,伺服器做出響應之後,二者便會斷開連線(一次會話結
通俗易懂,記憶深刻的cookie和session的理解
會話原理: 每點選一個連線,或開啟一個網頁就是一個會話。 http本身就是無狀態,網頁和網頁之間也沒有關係。 只有一種情況下有關係,就是後臺的網頁,要先登入後才能進入,登入時一個網頁,登入後是一個網頁
php中cookie和session的區別與簡易用法
php cookie session 一、區別1、Cookie是完全保存在客戶端。當客戶端禁止cookie時將不能再使用;對服務端壓力較小;可以指定生存周期;安全性差。2、Session是存放在服務端的。但session id是存放在客戶端的cookie中的,但php的session存放方法是多樣
cookie和session的區別和用法
exp 連接 介紹 相關 mil spl 需要 display 關註 flask中cookie和session介紹 一、cookie: 在網站中,http請求是無狀態的。也就是說即使第一次和服務器連接後並且登錄成功後,第二次請求服務器依然不能知道當前請求是哪個用戶。cook
關於Cookie和Session的一些定義和用法
Cookie的生存時間: 預設情況下瀏覽器會將Cookie儲存在記憶體中,只要瀏覽器不關閉,Cookie就一直存在. .如果希望關閉瀏覽器後Cookie仍然存在,可以通過設定過期時間達到目的. void Cookie.setMaxAge(int second); ps:second單位是秒,精度
WEB後臺--基於Token的WEB後臺登入認證機制(並講解其他認證機制以及cookie和session機制)
繼續這一個系列,基於Token的WEB後臺登入認證機制(並講解cookie和session機制)。每個後端不得不解決的認證問題。 本系列: 文章結構:(1)JWT(一種基於 token 的認證方案)介紹並介紹其他幾大認證機
基於Token的WEB後臺登入認證機制(並講解其他認證機制以及cookie和session機制)
幾種常用的認證機制 HTTP Basic Auth HTTP Basic Auth簡單點說明就是每次請求API時都提供使用者的username和password,簡言之,Basic Auth是配合RESTful API 使用的最簡單的認證方式,只需提供使用者
大端位元組序和小端位元組序通俗易懂講解
大端(儲存模式),是指資料的地位儲存在記憶體的高地址中,而資料的高位儲存在記憶體的低地址中。 小端(儲存模式),是指資料的地位儲存在記憶體的低地址中,而資料的高位儲存在記憶體的高地址中。 小端如下圖
cookie和session的區別及用法(PHP5)
1、HTTP協議本身是無狀態的。 我們上網都要靠HTTP協議傳遞資訊。比如我們在瀏覽器裡鍵入:www.bokee.com這個網址並回車,你會發現網址會變成:http://www.bokee.com,其原因就是瀏覽的網頁是基於http協議的。http協議無法記錄使用者
cookie和session的講解
content 兩個 傳輸 -- coo 購物車 unset dump 例如 php和js都是腳本語言; 客戶端與服務器之間的交互,都是傳輸協議來進行交互的,客戶向服務器發送的數據叫請求 request 服務器向客戶端傳輸數據叫響應 response 他們之間都是
cookie 和session 的區別詳解
重復 處理方式 一行 所有 有效 依據 是把 存儲 一個 二者的定義: 當你在瀏覽網站的時候,WEB 服務器會先送一小小資料放在你的計算機上,Cookie 會幫你在網站上所打的文字或是一些選擇, 都紀錄下來。當下次你再光臨同一個網站,WEB 服務器會先看看有沒有它上次留下的
Python之路66-Django中的Cookie和Session
python目錄一、Cookie二、Session一、Cookie1.獲取Cookie request.COOKIES["key"] request.get_signed_cookie(key, default=RAISE_ERROR, s, max_age=None) # 參數 # default:默認
Cookie和session
存在 購物車 自動 名稱 () 內存 request 標識 基於 1.會話定義:打開瀏覽器瀏覽某一個網站--多次請求--瀏覽器關閉這個過程稱之為會話。2.B 瀏覽器 /S 服務器 2.1.瀏覽器端的會話技術:cookie JAVA(Cookie)
cookie和session的區別
開發人員 一個 客戶端 匹配 也會 自己 ssi 成了 本地 幾乎每個web開發人員都會問Cookie和Session有什麽聯系和區別 拋出問題: 1.首先服務器是無記性的,不知道那個客戶端上過自己的網站; 2.如果不手動添加記憶功能,那麽每次訪問都需要登錄,豈不是很麻煩?
Django之cookie和session
name resp wrap sign ide 服務端 rgs err response 一、cookie 保存在客戶端瀏覽器上的鍵值對 1.獲取cookie 1 request.COOKIES[‘key‘] 2 request.get_signed_cookie(key
Cookie 和 Session
詳解 存儲 意見 語言 ron http font 郵箱 通過 PHP高級工程師之網站安全 在這裏和大家分享一下多數網絡黑客常用的攻擊方式及預防措施。 如有不善,多提意見(QQ:1595068971-郵箱:[email protec
關於django用戶登錄認證中的cookie和session
技術 ima username 就會 關於 logs 之前 cookie req 最近弄django的時候在用戶登錄這一塊遇到了困難,網上的資料也都不完整或者存在缺陷。 寫這篇文章的主要目的是對一些剛學django的新手朋友提供一些幫助。前提是你對django中的sessi
cookie和session的優缺點
cookie sessioncookie是web服務器保存在用戶硬盤上的一段文本,cookie允許在用戶電腦上保存信息並隨後再取它。當程序需要為某個客戶端的請求創建一個session時,服務器首先檢查這個客戶端的請求裏是否已包含了一個session標識(稱為session id),如果已包含則說明以前已經為此
Cookie 和Session 的區別
cto 字符串 follow jsp技術 基礎 出現 有著 腳本 erb 作者:郭無心鏈接:https://www.zhihu.com/question/19786827/answer/66706108來源:知乎著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請註明
Cookie和Session,訪問Web項目上的資源文件
容量 bmi red 顯示 ssi 物理 spa 管理 正整數 WEB項目總路徑問題總結: 背景:項目中的資源文件我們如何訪問:(路徑怎麽寫) 例子:webRoot目錄下有一個目標資源: target.html,如何訪問 思考: 目標