Django中的cookie和session
阿新 • • 發佈:2017-11-05
datatime cnblogs 字典 ati 時間 jquery exp close make
cookies
客戶端瀏覽器上的一個文件
{‘user‘:‘xiaoyanzi‘}
獲取cookie:
request.COOKIES.get(‘username‘)
寫cookie:
#設置cookie,關閉瀏覽器失效 response = render(request,‘index.html‘) response = redirect(‘/index/‘) response.set_cookie(‘key‘,‘value‘) return response
cookies參數
#cookie參數: max_age = None #超時時間(秒) expires = None #超時時間(datatime) import datetime current_data = datetime.datetime.utcnow() current_data +=datetime.timedelta(seconds=5) res.set_cookie(‘uname‘,‘aa‘,expires=current_data) path = ‘/‘ #cookie生效的路徑,/表示根路徑 domain = None #生效的域名 secure = False #https傳輸 httponly = True #僅http傳輸,js獲取不地道
客戶端操作cookie:
使用jquery插件:jquery.cookie.js
$.cookie(‘key‘,value,{‘path‘:‘/user_rlist/‘})
密文cookie:
obj.set_signed_cookie(salt=‘hhh‘) request.get_signed_cookie(salt=‘hhh‘)
session
a.Session 原理
session是保存在服務器端的鍵值對。
session = { ‘隨機字符串1‘:{ ‘is_login‘:True, ‘user‘:‘admin‘, ... } ‘隨機字符串2‘:{ ‘is_login‘:True, ‘user‘:‘admin‘, ... } }
b.Cookie和Session對比
cookie是保存在用戶瀏覽器端的鍵值對
session是保存在服務器端的鍵值對
session依賴於cookie,發給客戶端只有一條cookie
基於cookie做用戶驗證時,不放敏感信息
c.Session配置(缺少cache)
操作流程:
#生成隨機字符
#寫到用戶瀏覽器cookie
#保存到session中
#在隨機字符串對應的字典中設置相關內容
這四步操作只用如下命令就完成了:
request.session[‘username‘] = user request.session[‘is_login‘] = True
配置前準備:
python manage.py makemigrations python manage.py migrate
操作:
#獲取當前用戶的隨機字符串 #根據隨機字符串獲取對應信息 if request.session[‘is_login‘]: return HttpResponse(‘ok‘) request.session.setdefault(‘k1‘,123) #存在則不設置 request.session.get[‘k1‘,None] del request.session[‘k1‘] #用戶session的隨機字符串 request.session.session_key #講所有session失效日期小於當前日期的數據刪除 request.session.clear_expired() #檢查用戶session的隨機字符串 在數據庫中是否存在 request.session.exists(‘session_key‘) #刪除當前用戶的所有session數據 request.session.delete(‘session_key‘) request.session.clear() #設置session超時時間 request.session.set_expiry(60*60)
配置文件中設置默認操作,在settings中設置:
SESSION_COOKIE_NAME = ‘sissionid‘ #客戶端cookie的id名 SESSION_COOKIE_PATH = ‘/‘ #session的cookie保存路徑 SESSION_COOKIE_DOMAIN = None #session的kookie保存的域名 SESSION_COOKIE_SECURE = False #是否https傳輸cookie SESSION_COOKIE_HTTPONLY = True #是否只支持http傳輸 SESSION_COOKIE_AGE = 1209600 #超時時間為兩周 SESSION_AT_BROWSER_CLOSE = False #是否關閉瀏覽器就過期 SESSION_SAVE_EVERY_REQUEST = False #是否每次請求都保存Session
session支持設置cookie儲存位置,在settings中設置:
SESSION_ENGINE = ‘django.contrib.sessions.backends.db‘ #數據庫 SESSION_ENGINE = ‘django.contrib.sessions.backends.cache‘ #緩存 SESSION_CACHE_ALIAS = ‘default‘ #cache鏈接的名字 ps:chche也有多個鏈接: CACHES = CACHES = { ‘default‘:{ ‘BACKEND‘:‘‘, #引擎 ‘LOCATION‘:‘my_cache_table‘ #數據庫表 ‘TIMEOUT‘:300 #超時時間 ‘OPTIONS‘:{ ‘MAX_ENTRIES‘:300, #緩存最大個數 ‘CULL_FREQUENCY‘3, #剔除緩存個數 } ‘MEMOCHACHE‘:{ ‘BACKEND‘:‘‘, #引擎 ‘LOCATION‘:‘my_cache_table‘ #數據庫表 ‘TIMEOUT‘:300 #超時時間 ‘OPTIONS‘:{ ‘MAX_ENTRIES‘:300, #緩存最大個數 ‘CULL_FREQUENCY‘3, #剔除緩存個數 } }
#存在文件中:
SESSION_ENGINE = ‘django.contrib.sessions.backends.file‘ #文件
SESSION_FILE_PATH = os.path.join(BASE_DIR,‘cache‘)
Django中的cookie和session