Django中session和cookie簡單的使用

一、簡單的理解

session和cookie是request下的兩個對象,操作他們的值就是在操作字典,設置他們的屬性就是調用方法。

會話(Session)跟蹤是Web程序中常用的技術,用來跟蹤用戶的整個會話。Web應用程序是使用HTTP協議傳輸數據的。HTTP協議是無狀態的協議。一旦數據交換完畢,客戶端與服務器端的連接就會關閉,再次交換數據需要建立新的連接。這就意味著服務器無法從連接上跟蹤會話。解決此問題,常用的會話跟蹤技術是Cookie與Session。Cookie通過在客戶端記錄信息確定用戶身份,Session通過在服務器端記錄信息確定用戶身份。

在Django中要用session一定要先執行(創建表的過程):
python manage.py makemigrations
python manage.py migrate

在這里插入圖片描述

二、session:

*session存儲機制
(1)、當用戶來訪問服務端時,服務端生成一個隨機字符串;
(2)、當用戶登錄成功后 把 {sessionID :隨機字符串} 組織成鍵值對 加到 cookie里發送給用戶;
(3)、服務器以發送給客戶端 cookie中的隨機字符串做鍵,用戶信息做值,保存用戶信息;

所以服務器存儲的session格式應該是:
{sessionid:{‘username’:xx,‘password’:yy}}
request.session[‘username’] = ‘xx’
默認生成了隨機的sessionid,并且隱含了通過sessionID找到用戶信息那一步;

1.、設置值(字典):

request.session['username'] = 'Genius淼'
request.session['password'] = 'genius123'request.session.setdefault('username','password')#username 默認值為'password'

2、設置屬性

request.session.set_expiry(value) -- 設置session過期時間,默認是兩周。value:
- 數字(單位:秒)
- datatime(具體日期)
- None(依據全局失效策略)
- timedelta(時間增量)
注意:request.session.set_expiry(timedelta(days=30))時要在setting中添加:SESSION_SERIALIZER='django.contrib.sessions.serializers.PickleSerializer'

3、查看

request.session.keys()  
request.session.values() 
request.session.items()	

4、獲取

request.session["username"] 		 #  以字典形式讀取,鍵不存在會報錯
request.session.get("username")		 #  以get方法形式讀取,鍵不存在會報錯
request.session.get("username",None) #  加參,如果username不存在則讀取到None
request.session.session_key		     # 用戶session的隨機字符串

5、刪除

del request.session["username"]		# 以字典形式刪除
request.session.delete("username")	# 以方法形式刪除
request.session.delete('session_key') #刪除所有session
request.session.clear()				# 刪除所有session
request.session.clear_expired()		# 刪除已失效session
在setting中配置session(轉)

session存儲位置:
數據庫(默認) SESSION_ENGINE = ‘sdjango.contrib.sessions.backends.db’
緩存 SESSION_ENGINE = ‘django.contrib.sessions.backends.cache’
文件 SESSION_ENGINE = ‘django.contrib.sessions.backends.file’
緩存+數據庫 SESSION_ENGINE=‘django.contrib.sessions.backends.cached_db’
加密cookie(相當于沒有用session,又把敏感信息保存到客戶端了) SESSION_ENGINE = ‘django.contrib.sessions.backends.signed_cookies’

#session配置文件
SESSION_ENGINE = ‘django.contrib.sessions.backends.db’ # 引擎(默認)

SESSION_FILE_PATH = 文件路徑 # 緩存文件路徑,如果為None,則使用tempfile模塊獲取一個臨時地址tempfile.gettempdir()

SESSION_COOKIE_NAME = “sessionid” # Session的cookie保存在瀏覽器上時的key,即:sessionid=隨機字符串(默認)

SESSION_COOKIE_PATH = “/” # Session的cookie保存的路徑(默認)

SESSION_COOKIE_DOMAIN = None # Session的cookie保存的域名(默認)

SESSION_COOKIE_SECURE = False # 是否Https傳輸cookie(默認)

SESSION_COOKIE_HTTPONLY = True # 是否Session的cookie只支持http傳輸(默認)

SESSION_COOKIE_AGE = 1209600 # Session的cookie失效日期(2周)(默認)

SESSION_EXPIRE_AT_BROWSER_CLOSE = False # 是否關閉瀏覽器使得Session過期(默認)

SESSION_SAVE_EVERY_REQUEST = False # 是否每次請求都保存Session,默認修改之后才保存(默認)


三、cookie:

在django中,cookie是在聲明一個HttpResponse之后,通過set_cookie方法來設置的。它通過在響應頭里Set-Cookie設置鍵值對來實現在瀏覽器客戶端保存Cookie。

res = HttpResponse()		# 具體是什么響應要看自己的return

  • 設置值(字典):

     res.set_cookie('username','password')res.set_cookie('Genius淼','genius123')
    
  • 獲取

      username = request.COOKIES.get('username')
    
  • 刪除

      res.delete_cookie('username')
    
  • 設置屬性
    查看HttpResponseBase類:

    def set_cookie(self, key, value='', max_age=None, expires=None, path='/',domain=None, secure=False, httponly=False):......
    

    可傳參:
    key:Cookie的名稱
    value:Cookie的值
    max_age:失效時間,單位-秒。默認是-1 ——>負數:關閉瀏覽器失效;0表示刪除該cookie。
    expires:失效日期,同session的set_expiry
    path:該Cookie的使用路徑,’/‘為允許所有。’/index/‘則只能在/index下可以訪問,注意最后的 /
    domain:可以訪問該cookie的域名,以 ‘.‘開頭’,如’.baidu.com’
    secure:該Cookie是否僅被使用安全協議傳輸,默認是False。當使用https時,必須要secure設置為True
    httponly:限制在瀏覽器控制臺獲取鍵值對,但無法對抓包工具進行限制。

    舉例:res.set_cookie(“age”, “10”,max_age=“10”,expires=“2019-01-31”,)

  • 加密
    設置值:res.set_signed_cookie(‘age’, ‘10’,salt=“I’m secript”)
    取值:request.get_signed_cookie(‘age’,salt=“I’m secript”)
    如同多加了一條暗號

session與cookie參考

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/278743.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/278743.shtml
英文地址,請注明出處:http://en.pswp.cn/news/278743.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

攝影中的曝光補償是什么?

When you use your camera in some automatic modes like Program—or one of the semi-manual modes like Aperture Priority or Shutter Speed Priority—you don’t give up total control over everything: you can still control the exposure using exposure compensatio…

ajax回調打開新窗體防止瀏覽器攔截方法

2019獨角獸企業重金招聘Python工程師標準>>> 問題剖析: function click_fun(){ window.open("www.baidu.com");//能打開 $.ajax({ url: ${pageContext.request.contextPath}/activity/savePrizes.htm, type: post, dataType: json, data: data…

ES6學習--對象屬性的遍歷

ES6一共有5種方法可以遍歷對象的屬性。 (1)for...in for...in循環遍歷對象自身的和繼承的可枚舉屬性(不含Symbol屬性)。 (2)Object.keys(obj) Object.keys返回一個數組,包括對象自身的&#xff…

多點認證wi-fi_準備使用Wi-Fi 6:認證將于2019年第三季度啟動

多點認證wi-fiThe Wi-Fi Alliance already announced Wi-Fi 6 back in October. Today, it’s announcing the details of the Wi-Fi 6 certification process, which will launch in the third quarter of 2019. Expect many new Wi-Fi 6 devices later this year. Wi-Fi聯盟已…

jQuery初識和常用事件(一)

文章目錄一、jQuery二、入口函數三、選擇器選擇器小結 ★全部選擇器參考 ☆四、常用的 jQuery 事件方法事件寫法鼠標事件元素事件鍵盤事件文檔/窗口事件全部事件方法參考 ☆五、效果事件顯示與隱藏:hide,show,toggle淡入和淡出:fa…

nginx內嵌變量

FORWARD:http://tengine.taobao.org/nginx_docs/cn/docs/http/ngx_http_core_module.html#variables ngx_http_core_module模塊支持內嵌變量,變量名與Apache服務器對應。 首先,這些變量可以表示客戶端的請求頭字段,諸如$http_user_agent、$ht…

pdf文檔遇到了共享沖突_如何將鏈接共享為PDF格式的Google文檔鏈接

pdf文檔遇到了共享沖突Using Google Docs is a great way to collaborate on and share documents. Sometimes, though, you want to provide somebody with a PDF instead of an editable document. Google Docs now lets you edit your sharing link to provide a PDF. Best …

Visual Studio 2019 preview中體驗C# 8.0新語法

準備工作: Visual Studio 2019 Preview版本中并沒有包含所有的C# 8.0的新功能,但目前也有一些可以試用了。在開始之前,需要進行入兩項設置: 將Framework設置為.net core 3.0 將C#語法設置為8.0 也可以直接編輯.csproj文件&#x…

jQuery 對HTML的操作(二)

文章目錄一、jQuery獲取、設置HTML標簽的內容和屬性獲得內容 - text()、html() 以及 val()獲取屬性 - attr(),prop()二、增刪 HTML 的內容增加刪除三、操作CSSaddClass 添加removeClass 刪除toggleClass 切換css 獲取與設置所有操作html、css方法參考 ☆四、操作元素…

roku能不能安裝軟件_如何在Roku中使用Google Assistant

roku能不能安裝軟件As more of our devices connect to each other, it’s always nice to know that different products from different companies work together. A Chromecast isn’t expensive, but being able to use your TV directly with Google Assistant is better.…

在線建立或重做mysql主從復制架構方法(傳統模式和GTID模式)【轉】

mysql主從復制架構,是mysql數據庫主要特色之一,絕大多數公司都有用到。 而GTID模式是基于事務的復制模式的意思,發展到現在也是越來越多人用。 以前很多文章,介紹搭建mysql主從復制架構,是需要停止應用服務來做的,對于生產環境&am…

面試學習資料

1 Java面試資料總結 (github推薦指數高) 2 后端架構師 1. 綜合 《Java 面試題 —— 老梁 Java 面試通關要點匯總集》《Java 面試題 —— 老徐 Java 初中級準備的面試題》《Java 面試題 —— 零度 Java 面試題系列》《Java 面試題 —— 東黃的學習方法和面…

jQuery對Ajax的封裝應用(三)

文章目錄一、Ajax二、load三、ajax(參數),get,set$.ajax$.ajax的get、post簡寫形式四、ajax全部方法參考 ☆一、Ajax AJAX 是與服務器交換數據的技術,它在不重載全部頁面的情況下,實現了對部分網頁的更新。…

如何使用卡巴斯基急救盤清理感染的PC

When you’re dealing with a PC that is completely infected in viruses, sometimes the best thing to do is reboot into a rescue disk and run a full virus scan from there. Here’s how to use the Kaspersky Rescue Disk to clean an infected PC. 當您要處理一臺完全…

2018.12.08 codeforces 946D. Timetable(背包)

傳送門 題意簡述:有一個人上n天課,每天有m個小時的時間安排表(一個01串),為1表示要上課,否則不上課,求出如果可以最多翹kkk節課這nnn天在校待的總時間的最小值(一天必須在所有課上完…

jQuery雜項進階(四)

文章目錄一、$ 的替換二、使用JSONP實現跨域三、jQuery 雜項方法、實用工具、回調對象、延遲對象參考 ☆四、jQuery 自身屬性參考 ☆五、jQuery 插件介紹和參考 ☆jQuery 樹型菜單插件(Treeview)jQuery Validate表單驗證,jQuery Password Validation(密碼…

什么是WLIDSVC.EXE和WLIDSVCM.EXE,它們為什么運行?

You’re no doubt reading this article because you’re wondering what those two processes are doing cluttering up Task Manager, and also wondering why they are in capital letters. You’ve come to the right place. 毫無疑問,您閱讀本文是因為您想知道…

[USACO10DEC] Treasure Chest

題目鏈接 90 Points:智障的區間 DP……設 dp[i][j] 表示區間 [i, j] 能取的最大價值,但我還是 sd 地開了第三維表示先取還是后取的價值。 交上去以為能 A,結果 #2 開心地 MLE……一看內存,64MB(把評測機吊起來打一頓&a…

工程化,模塊化,組件化,規范化

前端講究 工程化,模塊化,組件化,層層遞進。 一、工程化 工程化是整個工程的結構、樣式和動作分離,工程化是一種思想而不是某種技術(當然為了實現工程化我們會用一些技術)。各種規范、技術選型、項目構建優…

linux壓縮和解壓縮_Linux QuickTip:一步下載和解壓縮

linux壓縮和解壓縮Most of the time, when I download something it’s a file archive of some kind – usually a tarball or a zip file. This could be some source code for an app that isn’t included in Gentoo’s Portage tree, some documentation for an internal …