日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python如何使用session和cookie_django进阶之cookie和session的使用示例

發布時間:2025/4/5 python 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python如何使用session和cookie_django进阶之cookie和session的使用示例 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Cookies :是瀏覽器為 Web 服務器存儲的一小段信息。 每次瀏覽器從某個服務器請求頁面時,它收到服務器回發送過來的cookies。它保存在瀏覽器下的某個文件夾下。

Session:Django的Session機制會向請求的瀏覽器發送cookie字符串。同時也會保存到本地一份,用來驗證瀏覽器登錄是否為同一用戶。它存在于服務器,Django默認會把session存入到數據庫中。

Session依賴于Cookie,如果瀏覽器不能保存cookies那么session就失效了。因為它需要瀏覽器的cookie值(sessionid)去session里做對比。session就是用來在服務器端保存用戶的會話狀態。

Cookie

1、獲取Cookie:

request.COOKIES[key]

request.COOKIES.get(key)

# 普通cookie是明文傳輸的,可以直接在客戶端直接打開,所以需要加鹽,解鹽之后才能查看

request.get_signed_cookie(key, default=RAISE_ERROR, salt='', max_age=None)

參數:

default: 默認值

salt: 加密鹽

max_age: 后臺控制過期時間

2、設置Cookie:

rep = HttpResponse(...) 或 rep = render(request, ...)

rep.set_cookie(key,value,...)

# 給cookie簽名

rep.set_signed_cookie(key,value,salt='加密鹽',...)

參數:

key, 鍵

value='', 值

max_age=None, 超時時間

expires=None, 超時時間(IE requires expires, so set it if hasn't been already.)

path='/', Cookie生效的路徑,/ 表示根路徑,特殊的:跟路徑的cookie可以被任何url的頁面訪問

domain=None, Cookie生效的域名

secure=False, https傳輸

httponly=False True只能http協議傳輸,無法被JavaScript獲取(不是絕對,底層抓包可以獲取到也可以被覆蓋),防止xss攻擊

由于cookie保存在客戶端的電腦上,所以,JavaScript和jquery也可以操作cookie。

$.cookie("list_pager_num", 30,{ path: '/' });

Session

Django中默認支持Session,其內部提供了5種類型的Session供開發者使用:

數據庫(默認)

緩存

文件

緩存+數據庫

加密cookie

1、數據庫Session

Django默認支持Session,并且默認是將Session數據存儲在數據庫中,即:django_session 表中。

a. 配置 settings.py

SESSION_ENGINE = 'django.contrib.sessions.backends.db' # 引擎(默認)

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,默認修改之后才保存(默認)

b. 使用

def index(request):

# 獲取、設置、刪除Session中數據

request.session['k1']

request.session.get('k1',None)

request.session['k1'] = 123

request.session.setdefault('k1',123) # 存在則不設置

del request.session['k1']

# 所有 鍵、值、鍵值對

request.session.keys()

request.session.values()

request.session.items()

request.session.iterkeys()

request.session.itervalues()

request.session.iteritems()

# 用戶session的隨機字符串

request.session.session_key

# 將所有Session失效日期小于當前日期的數據刪除

request.session.clear_expired()

# 檢查 用戶session的隨機字符串 在數據庫中是否

request.session.exists("session_key")

# 刪除當前用戶的所有Session數據

request.session.delete("session_key")

2、緩存Session

a. 配置 settings.py

SESSION_ENGINE = 'django.contrib.sessions.backends.cache' # 引擎

SESSION_CACHE_ALIAS = 'default' # 使用的緩存別名(默認內存緩存,也可以是memcache),此處別名依賴緩存的設置

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,默認修改之后才保存

b. 使用

同上

3、文件Session

a. 配置 settings.py

SESSION_ENGINE = 'django.contrib.sessions.backends.file' # 引擎

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

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,默認修改之后才保存

b. 使用

同上

4、緩存+數據庫Session

數據庫用于做持久化,緩存用于提高效率

a. 配置 settings.py

SESSION_ENGINE = 'django.contrib.sessions.backends.cached_db' # 引擎

b. 使用

同上

5、加密cookie Session

a. 配置 settings.py

SESSION_ENGINE = 'django.contrib.sessions.backends.signed_cookies' # 引擎

b. 使用

同上

示例:

from django.shortcuts import render,redirect

# Create your views here.

import datetime

def login(request):

print("COOKIES",request.COOKIES) #打印cookies 一個字典,里面多個鍵值對

print("SESSION",request.session) #session為服務器對應客戶信息的鍵

if request.method=="POST":

name=request.POST.get("user")

pwd=request.POST.get("pwd")

if name=="yuan" and pwd=="123":

# ret=redirect("/index/")

# 給對象ret設置cookie 安全性較差 ,設定有效時間max_age,expires,

# ret.set_cookie("username",{"11":"22"},max_age=10,expires=datetime.datetime.utcnow()+datetime.timedelta(days=3))

# return ret

# COOKIE SESSION一起使用

# session 以字典存放在服務器端,發給客戶端的是數據對應的鍵,

request.session["is_login"]=True # 在session中增加鍵值對

request.session["user"]=name

return redirect("/index/")

return render(request,"login.html")

def index(request):

if request.COOKIES.get("username",None): # 取不到設置默認值為None

name = request.COOKIES.get("username",None)

return render(request, "index.html", locals())

# session驗證 存在數據庫中,所以要先makemigrations生成數據庫

if request.session.get("is_login",None):

name=request.session.get("user",None)

return render(request,"index.html",locals())

else:

return redirect("/login/")

##session獲取

request.session.get("user",None)

# 設置

request.session["user"]=name

# 刪除

del request.session.get("user")

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持我們。

本文標題: django進階之cookie和session的使用示例

本文地址: http://www.cppcns.com/jiaoben/python/237371.html

總結

以上是生活随笔為你收集整理的python如何使用session和cookie_django进阶之cookie和session的使用示例的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。