[py][mx]django的cookie和session操作
這玩意可以實現7天免登錄等功能.
session和cookie機制原理和交互過程
交互過程
① 客戶端訪問,無服務端寫入的Cookie
② 服務端的Cookie寫入瀏覽器
③ 瀏覽器解析Cookie,保存至瀏覽器文件
④ 客戶端訪問,有服務端寫入的Cookie
⑤ 服務器獲取
django請求中的cookie
第一次訪問服務端會給一個csrf的cookie
登錄完成後,默認給一個為期半個月的cookie 用於訪問別的也沒使用.
django中cookie與session的實現原理
app默認註冊了攔截器session, 瀏覽器的request先過這個攔截器後,走views邏輯
之後django_session表裏會維護一個記錄.
django session設置
Django中操作session:
獲取session:request.session[key] request.session.get(key)
設置session:reqeust.session[key] = value
刪除session:del request[key]
users/views.py
def login(request): if request.method == "POST": username = request.POST.get("username") password = request.POST.get("password") if username == "maotai" and password == "123456": request.session['name'] = "maotai-session" #定義一個session key request.session['name2'] = "maotai2-session"#定義一個session key name = request.session.get("name", "") # 獲取一個session key name2 = request.session.get("name2", "") # return redirect("/") return render(request, "index.html", {"name": name, "name2": name2}) #將session key返回到前端 else: return render(request, "login.html") elif request.method == "GET": return render(request, "login.html")
登錄系統
可以看到設置了一個cookie字段, 可見我後端無論設置多個session key, 都給前端返回一個cookie
這裏我設置了2個
request.session['name'] = "maotai-session" #定義一個session key
request.session['name2'] = "maotai2-session"#定義一個session key
點登錄可以獲取到key.
templates/login.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>login</title> </head> <body> <div> <form action="/login/" method="post"> <p><input type="text" placeholder="username" name="username"></p> <p><input type="text" placeholder="password" name="password"></p> <p><input type="submit"></p> {% csrf_token %} </form> </div> </body> </html>
django cookie默認15天過期時間設置 settings.py
cookie可以有過期時間,這樣瀏覽器就知道什麽時候可以刪除cookie了。
如果cookie沒有設置過期時間,當用戶關閉瀏覽器的時候,cookie就自動過期了。
你可以改變 SESSION_EXPIRE_AT_BROWSER_CLOSE 的設置來控制session框架的這一行為。
缺省情況下, SESSION_EXPIRE_AT_BROWSER_CLOSE 設置為 False ,這樣,會話cookie可以在用戶瀏覽器中保持有效達 SESSION_COOKIE_AGE 秒(缺省設置是兩周,即1,209,600 秒)。
如果你不想用戶每次打開瀏覽器都必須重新登陸的話,用這個參數來幫你。如果 SESSION_EXPIRE_AT_BROWSER_CLOSE 設置為 True ,當瀏覽器關閉時,Django會使cookie失效。
如果SESSION_EXPIRE_AT_BROWSER_CLOSE 設置為true的話,則每次關閉瀏覽器打開都得重新登錄. 默認是false,即每次不必重新登錄.
發現個小問題,即使每次重新登錄, django_session裏的session的舊記錄仍然存在.
[py][mx]django的cookie和session操作