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') -
設置屬性:
def set_cookie(self, key, value='', max_age=None, expires=None, path='/',domain=None, secure=False, httponly=False):......
查看HttpResponseBase類:可傳參:
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參考
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的Django中session和cookie简单的使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Q_learning简介与实例
- 下一篇: jQuery初识和常用事件(一)