django----cookie和session
阿新 • • 發佈:2019-03-24
play 字典 關閉瀏覽器 ons dql 請求 ack 整數 ()
獲取cookie
request.COOKIES.get("islogin",None) #如果有就獲取,沒有就默認為none
設置cookie
obj = redirect("/index/")
obj.set_cookie("islogin",True) #設置cookie值,註意這裏的參數,一個是鍵,一個是值
obj.set_cookie("haiyan","344",20) #20代表過期時間
obj.set_cookie("username", username)
刪除cookie
obj.delete_cookie("cookie_key",path="/",domain=name)
用與 logout
使用cookie,做登錄驗證
from django.shortcuts import render,redirect,HttpResponse from app01 import models # Create your views here. def login(request): if request.method=="POST": print("所有請求數據",request.POST) username = request.POST.get("username") passwordView Code= request.POST.get("password") # 查看數據庫中的用戶名和密碼,對比用戶輸入的是否是數據庫中的值 ret = models.UserInfo.objects.filter(username=username,password=password) if ret: #如果用戶名和密碼都正確,則登錄成功 print(request.COOKIES) #{‘csrftoken‘: ‘1EaTcdQlxdwtR0eXu4uDqEHElEpOlDRJoSAd7TfA7cBDxAyxADVPbIKaZk6J0DVB‘} # 由於http協議是無狀態的,你這次登錄完就不知道是誰登錄了,當別人知道你的主頁url,就都可以登錄了。那樣就沒有隱私了 # 這就得用到cookie了 obj = redirect("/index/") obj.set_cookie("islogin",True) #設置cookie值,註意這裏的參數,一個是鍵,一個是值 obj.set_cookie("haiyan","344",20) #20代表過期時間 obj.set_cookie("username", username) return obj else: return render(request,"login.html") else: return render(request,"login.html") def index(request): is_login = request.COOKIES.get("islogin",None) #得到cookie,有就得到,沒有就得到none if is_login: username = request.COOKIES.get("username") print(username) return render(request,"index.html",{"username":username}) else: #如果沒有拿到值,就一直在登錄頁面就進不去 return redirect("/login/")
Sessin操作
1、設置session值
request.session["session_name"]="admin"
2、獲取session值
session_name = request.session("session_name")
3、刪除session值
del request.session["session_name"] 刪除一組鍵值對
request.session.flush() 刪除一條記錄
4、檢測是否操作session值
if "session_name" is request.session:
其它操作
5、get(key, default=None)
fav_color = request.session.get(‘fav_color‘, ‘red‘)
6、pop(key)
fav_color = request.session.pop(‘fav_color‘)
7、keys()
8、items()
9、setdefault()
10、flush() 刪除當前的會話數據並刪除會話的Cookie。
這用於確保前面的會話數據不可以再次被用戶的瀏覽器訪問
例如,django.contrib.auth.logout() 函數中就會調用它。
用戶session的隨機字符串
request.session.session_key
request.session.clear_expired() #將所有Session失效日期小於當前日期的數據刪除
request.session.exists("session_key") # 檢查 用戶session的隨機字符串 在數據庫中是否
request.session.delete("session_key") # 刪除當前用戶的所有Session數據
request.session.set_expiry(value)
* 如果value是個整數,session會在些秒數後失效。
* 如果value是個datatime或timedelta,session就會在這個時間後失效。
* 如果value是0,用戶關閉瀏覽器session就會失效。
* 如果value是None,session會依賴全局session失效策略。
session驗證用戶登錄
def log_in(request): if request.method=="POST": username=request.POST[‘user‘] password=request.POST[‘pwd‘] user=UserInfo.objects.filter(username=username,password=password) if user: #設置session內部的字典內容 request.session[‘is_login‘]=‘true‘ request.session[‘username‘]=username #登錄成功就將url重定向到後臺的url return redirect(‘/backend/‘) #登錄不成功或第一訪問就停留在登錄頁面 return render(request,‘login.html‘) def backend(request): print(request.session,"------cookie") print(request.COOKIES,‘-------session‘) """ 這裏必須用讀取字典的get()方法把is_login的value缺省設置為False, 當用戶訪問backend這個url先嘗試獲取這個瀏覽器對應的session中的 is_login的值。如果對方登錄成功的話,在login裏就已經把is_login 的值修改為了True,反之這個值就是False的 """ is_login=request.session.get(‘is_login‘,False) #如果為真,就說明用戶是正常登陸的 if is_login: #獲取字典的內容並傳入頁面文件 cookie_content=request.COOKIES session_content=request.session username=request.session[‘username‘] return render(request,‘backend.html‘,locals()) else: """ 如果訪問的時候沒有攜帶正確的session, 就直接被重定向url回login頁面 """ return redirect(‘/login/‘) def log_out(request): """ 直接通過request.session[‘is_login‘]回去返回的時候, 如果is_login對應的value值不存在會導致程序異常。所以 需要做異常處理 """ try: #刪除is_login對應的value值 del request.session[‘is_login‘] # OR---->request.session.flush() # 刪除django-session表中的對應一行記錄 except KeyError: pass #點擊註銷之後,直接重定向回登錄頁面 return redirect(‘/login/‘)View Code
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,默認修改之後才保存(默認)
緩存配置
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,默認修改之後才保存
文件配置
a. 配置 settings.py SESSION_ENGINE = ‘django.contrib.sessions.backends.file‘ # 引擎 SESSION_FILE_PATH = None # 緩存文件路徑,如果為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,默認修改之後才保存
django----cookie和session