cookie和session 以及Django中应用
cookie和session 以及Django中應(yīng)用
cookie和session機(jī)制
cookie和session機(jī)制
cookie機(jī)制采用的是在客戶端保持狀態(tài)的方案。作用就是為了解決HTTP協(xié)議無狀態(tài)的缺陷所做的努力。
session機(jī)制采用的是一種在客戶端與服務(wù)器之間保持狀態(tài)的解決方案。由于采用服務(wù)器端保持狀態(tài)的方案在客戶端也需要保持一個標(biāo)識,
所以session機(jī)制可能需要借助于cookie機(jī)制來達(dá)到保存標(biāo)識的目的。session還提供了方便管理全局變量的方式。
session 是針對每一個用戶的,變量的值保存在服務(wù)器上,用一個sessionID來區(qū)分哪個用戶的session
cookie和session內(nèi)容
cookie內(nèi)容主要包括:key, value, 過期時間,路徑和域。路徑和域一起構(gòu)成了cookie的作用范圍。
cookie的使用是由瀏覽器按照一定的規(guī)則在后臺自動發(fā)送給服務(wù)器的,瀏覽器檢查所有儲存的cookie,
如果某個cookie的作用范圍大于等于將要請求的資源所在位置,將cookie附在請求資源的HTTP請求頭上發(fā)給服務(wù)器。
cookie的生命周期跟過期時間相關(guān),如果不設(shè)置過期時間,成為回話cookie,保存在內(nèi)存中,關(guān)閉瀏覽器窗口,cookie消失。
如果設(shè)置過期時間,瀏覽器會把cookie寫入硬盤,這些cookie仍然有效,直到超過設(shè)定的過期時間。
存在硬盤上的cookie可以在同一個瀏覽器不同進(jìn)程間共享,比如兩個Chrome窗口。存在內(nèi)存的,不同瀏覽器不同的處理方式。
session內(nèi)容,服務(wù)器使用類似python字典的 key value的形式存儲的,存儲session方式很多,數(shù)據(jù)庫,緩存,文件,加密cookie,數(shù)據(jù)庫加緩存。
?Django中的cookie
cookie中的一些參數(shù):
--? max_age=1,? cookie生效的時間,單位是秒。
--? expires? 具體的過期時間
--? path= “/”? 作用路徑 寫/代表所有的url都可以訪問到cookie 可以指定url
-- domain= None? None代表當(dāng)前域名? 指定哪個域名以及它下面的二級域名(子域名)可以訪問這個cookie
-- secure = False? Https安全相關(guān)
-- httponly=False? 限制只能通過http傳輸 JS無法再傳輸中獲取和修改
設(shè)置cookie以及獲取cookie
# 設(shè)置cookie# 普通設(shè)置方式response_obj.set_cookie("key", "value",expires="time",path="/")# 加鹽 # 加鹽需要在服務(wù)端進(jìn)行解鹽才能查看response_obj.set_signed_cookie("k","v",salt="gaoxin") # 獲取cookie # 普通cookies = request.COOKIES.get("key") # 加鹽cookies = request.get_signed_cookie("k", salt="gaoxin")cookie + session 的工作原理
-- 1 當(dāng)用戶來訪問服務(wù)器時,服務(wù)端生成一個隨機(jī)字符串。
-- 2 當(dāng)用戶登錄成功后,把 {sessionID:隨機(jī)字符串} 加到cookie里發(fā)送給瀏覽器用戶。
-- 3 服務(wù)器以發(fā)送給客戶端cookie中的隨機(jī)字符串為鍵,用戶信息做值,保存用戶信息
Django中的session
django中session中一些方法:
? 注意 :request.session['name'] = 'gaoxin'? 默認(rèn)隱含了通過sessionID找到用戶信息那一步,刪除也是如此。
# 獲取,設(shè)置,刪除session中數(shù)據(jù)# 獲取request.session['key']request.session.get('key', None) # 不報錯 設(shè)置一個默認(rèn)值# 設(shè)置request.session['key'] = "value"request.session.setdefault('key', "value")# 存在則不設(shè)置# 刪除del request.session['key']# 獲取所有的鍵,值,鍵值對 request.session.keys()request.session.values()request.session.items()request.session.iterkeys()request.session.itervalues()request.session.iteritems()# 用戶session的隨機(jī)字符串 request.session.session_key# 清除數(shù)據(jù)庫過期的session request.session.clear_expired() # 檢查用戶session的隨機(jī)字符串是否在數(shù)據(jù)庫中request.session.exists("session_key") # 清除當(dāng)前用戶的所有session數(shù)據(jù)request.session.delete("session_key") # 設(shè)置session的過期時間 request.session.set_expiry(value) # 如果value是個整數(shù) session會在這些秒后失效 # 如果是個datetime類型的 就會在這個時間后失效 # 如果value是0,用戶關(guān)閉瀏覽器session就會失效 # 如果value是None,session就會依賴全局session失效策略session的配置文件
# 引擎 (存儲位置) SESSION_ENGINE = "django.contrib.session.backends.file"SESSION_ENGINE = "django.contrib.session.backends.cached_db" # 緩存文件路徑 SESSION_FILE_PATH = "文件路徑"# cookie保存在瀏覽器上的key 即 sessionID = 隨機(jī)字符串 SESSION_COOKIE_NAME = "gaoxin"# cookie 保存的路徑 SESSION_COOKIE_PATH = '/'# cookie保存的域名 SESSION_COOKIE_DOMAIN = None# 是否https傳輸cookie SESSION_COOKIE_SECURE = False# 是否只支持http傳輸 SESSION_COOKIE_HTTPONLY = True# cookie失效日期為600000秒 默認(rèn)1209600秒 SESSION_COOKIE_AGE = 600000# 是否關(guān)閉瀏覽器使session過期 SESSION_EXPIRE_BROWSER_CLOSE = False# 如果設(shè)置成True 會在每次請求服務(wù)器的時候會以新的請求時間向后延期過期時間 # 淘寶一直逛就不會登出 不刷新頁面過段時間就自動登出 SESSION_SAVE_EVERY_REQUEST = True
?
?
?
Copyright ?2018 GGG_XXX轉(zhuǎn)載于:https://www.cnblogs.com/chongdongxiaoyu/p/9284679.html
總結(jié)
以上是生活随笔為你收集整理的cookie和session 以及Django中应用的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何伪造IP(转)
- 下一篇: ABB RAPID SOCKET编程