django進階開發(一)--session

基於cookie作用戶驗證時:敏感信息不適合放在cookie中html

session依賴cookie前端

session原理

cookie是保存在用戶瀏覽器端的鍵值對python

session是保存在服務器端的鍵值對數據庫

 

session服務端中存在的數據爲:django

複製代碼
session = {

   隨機字符串1:{

   用戶1的相關信息

}

   隨機字符串2:{

   用戶2的相關信息

}

}
複製代碼

session客戶端即客戶端的瀏覽器的cookie中存的數據是當前用戶對應的隨機字符串瀏覽器

session的工做過程

一、    生成隨機字符串緩存

二、    寫到用戶瀏覽器的cookie中服務器

三、    保存到session中cookie

四、    在隨機字符串對應的字典中設置相關內容session

而上述過程在Django中的體現爲:

request.session["username"]=user

這裏的username爲經過request.POST.get("username")從前端html頁面中獲取到的用戶名信息

注意:

在Django中要用session中必定要先執行:

python manage.py makemigrations

python manage.py migrate

 

當用戶登陸的時候的就會在數據庫的django_session表中記錄session信息

 

一樣的經過request.session["username"]也能夠獲取相應的值

在這個過程當中:

一、    首先獲取當前用戶的隨機字符串

二、    根據隨機字符串獲取對應的內容

 

session的操做

 

request.session["k1"]  若是不存在則會報錯

request.session.get["k1"],若是不存在則會報錯,爲了防止出錯能夠request.session.get('k1',none)

 

request.session['k1'] = 123 設置session值

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

del request.session['k1']  刪除

request.session.clear()    刪除

 

全部 鍵、值、鍵值對

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")

 

request.session.set_expiry(value)

默認的過時時間是兩週,若是本身設置了過時時間,這樣本身設定的優先級就會高於默認的

若是value是個整數,session會在些秒數後失效。

若是value是個datatime或timedelta,session就會在這個時間後失效。

若是value是0,用戶關閉瀏覽器session就會失效。

若是value是None,session會依賴全局session失效策略。

 

配置setting.py

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中對於session的存儲方式

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

數據庫(默認)

緩存

文件

緩存+數據庫

加密cookie

一、若是是數據庫,須要在settings.py中配置以下:

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

二、若是是緩存session,須要在settings.py中配置以下:

SESSION_ENGINE = 'django.contrib.sessions.backends.cache'(引擎)

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

一、    若是是文件session, 須要在settings.py中配置以下:

SESSION_ENGINE = 'django.contrib.sessions.backends.file' (引擎)

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

二、    若是是緩存+數據庫session,須要在settings.py中配置以下:

SESSION_ENGINE='django.contrib.sessions.backends.cached_db'       (引擎)

清除session

python manage.py clearsessions

 1 from django.shortcuts import render  2 from django.shortcuts import HttpResponse  3 from django.shortcuts import redirect  4 
 5 # Create your views here.
 6 user = "a"
 7 pwd = "a"
 8 def login(request):  9     if request.method == "GET": 10         return render(request,"login.html") 11     elif request.method == "POST": 12         u = request.POST.get("user") 13         p = request.POST.get("password") 14         if u == user and p ==pwd: 15             #session中設置值
16             request.session["username"] = u 17             request.session["is_login"] = True 18             if request.POST.get("rmb",None) == "1": 19                 #設置超時時間
20                 request.session.set_expiry(10) 21             return redirect("/index") 22         else: 23             return render(request,"login.html") 24 def index(request): 25     #session中獲取值
26     if request.session.get("is_login",None): 27         current_user = request.session["username"] 28         return render(request,"index.html",{"current_user":current_user}) 29     else: 30         return redirect("/login") 31 def logout(request): 32     #註銷
33  request.session.clear() 34     return redirect("/login")
View Code
相關文章
相關標籤/搜索