使用Django設置Session


Session就是保存了會話里面的數據,通過request.session進行獲取

# 首頁
def welcome(request):
se = request.session
print(se)
login_user_name = se.get('login_user_name')
# login_user_name = se['login_user_name'] # 有KeyErrors錯誤
return render(request, "welcome.html", {'login_user_name': login_user_name})

# 登錄頁面
def login(request):

return render(request, "login.html")

# 登錄的業務邏輯
def do_login(request):
# 獲取登錄用戶名、密碼
userName = request.POST.get('userName')
# 基本參數校驗

# 數據庫進行匹配

# 驗證數據庫是否存在

# 存在就將用戶名寫入session
request.session['login_user_name'] = userName
return redirect("/user/welcome")

# 注銷邏輯
def logout(request):
# 把userName從當前的session移除
# del request.session['login_user_name']
request.session.flush()

return redirect("/user/welcome")


Session和Cookie的關系是什么?
Session是基於Cookie, 是因為把數據寫入session時將會生成一個隨機字符串,
並將隨機字符串存入cookie,再讀取時,是先從cookie中獲取這個隨機字符串,在去獲取session內容
在SessionMiddleware中的process_request方法里面可以看到

Session的配置:

# 使用的緩存別名(默認內存緩存)
SESSION_CACHE_ALIAS = 'default'

SESSION_COOKIE_AGE = 1209600 # 默認兩周單位秒
SESSION_COOKIE_DOMAIN = None # session cookie域名 默認沒有設置就是當前域名
SESSION_COOKIE_HTTPONLY = True # 設置session cookie是httponly
SESSION_COOKIE_NAME = 'sessionId' # session cookie的名字
SESSION_COOKIE_PATH = '/' # session cookie的path
SESSION_COOKIE_SECURE = False # session cookie的secure
SESSION_ENGINE = 'django.contrib.sessions.backends.db' # session存貯位置默認db
# 'django.contrib.sessions.backends.db'
# 'django.contrib.sessions.backends.file'
# 'django.contrib.sessions.backends.cache'
# 'django.contrib.sessions.backends.cached_db'
# 'django.contrib.sessions.backends.signed_cookies'
SESSION_EXPIRE_AT_BROWSER_CLOSE = False # 瀏覽器關閉后是否過期session,默認是False
SESSION_FILE_PATH = None #默認沒有,就是選擇session存儲是file時設置的存儲位置
# 瀏覽器刷新時session是否重新計算過期時間,
# 比如設置10分鍾過期,那如果為True,每次刷新session都是重新計算時間,
# 如果為False就是10分鍾后就過期不管你刷不刷新
SESSION_SAVE_EVERY_REQUEST = False
SESSION_SERIALIZER = 'django.contrib.sessions.serializers.JSONSerializer' # session序列化類型
# 'django.contrib.sessions.serializers.PickleSerializer'
# 'django.contrib.sessions.serializers.JSONSerializer'


Session中的操作方法:
1、獲取 request.session.get(key)或者是request.session[key]
2、寫入request.session[key] = value
3、刪 del request.session[key]
4、刪除當前session request.session.flush()

Session的過期時間設置:
方法是set_expiry(value)
1.如果value=0那么瀏覽器關閉時,session會過期
2.如果value=datetime或者timedelta就是設置到什么時間點過期,必須要在settins.py中設置SESSION_SERIALIZER = 'django.contrib.sessions.serializers.PickleSerializer'
3.如果value=None,跟全局的settings.py中的SESSION_COOKIE_AGE決定

Session存入的值是一個Base64加密的串,可以進行解密
MD5:不可逆加密
暴力破解,匹配

session和cookie的區別
a) 存放位置:session存放於服務器,cookie存放在客戶端;
b) 安全性:cookie不安全,session安全,因此session在服務端,cookie在客戶端;
c) 大小限制:cookie會由客戶端瀏覽器控制,單個cookie保存的數據不能超過4K,很多瀏覽器都限制一個站點最多保存20個cookie。而session在在服務端,理論上沒有大小限制。
d) 系統性能影響:session存在服務端,當session比較多的情況下,服務端會受其影響,而cookie在客戶端,不會影響服務器性能。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM