Django框架下的Session操作
阿新 • • 發佈:2022-03-08
1、首先編寫login.html登入頁面
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>登入頁面</title> <link rel="stylesheet" href="/static/bootstrap/css/bootstrap.min.css"> <script type="text/javascript" src="/static/js/jquery-3.4.1.js"></script> <script type="text/javascript" src="/static/login/login.js"></script> <style> #login-btn{ outline: none; border: none; } </style> </head> <body> <div class="container"> <div class="row"> <div class="col-md-3 col-lg-offset-3"> <div> <form> {% csrf_token %} <div class="form-group"> 使用者名稱<input type="text" id="user" class="form-control"> </div> <div class="form-group"> 密碼<input type="password" id="pwd" class="form-control"> </div> <input type="button" value="登入" id="login-btn" class="btn btn-success pull-right"> <p class="error"></p> </form> </div> </div> </div> </div> </body> </html>
2、編寫登入後跳轉index.html頁面,跳轉頁面上面有session登出使用者登入按鈕
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>首頁</title> </head> <body> <h3>上次登入時間:{{ last_visit_time }}</h3> <h2>Hi! {{ username }}</h2> <a href="/login_out/">登出</a> </body> </html>
3、利用jquery, ajax編寫使用者驗證登入,
$(function () { $('#login-btn').click(function () { $.ajax({ url: '', type: 'post', data:{ user: $('#user').val(), pwd: $('#pwd').val(), // 因利用ajax驗證使用者登入需要新增如下: csrfmiddlewaretoken: $("[name='csrfmiddlewaretoken']").val() }, success:function (data) { if (data.user){ location.href='/index/' }else{ $('.error').text(data.msg).css({ color: 'red', }) } } }) }); });
4、Django框架session操作,驗證使用者登入
def login(request): import datetime """ 設定session request.session['is_login'] = True #設定session為True判斷為登入成功 request.session['username'] = status.user #設定session獲取使用者名稱 步驟: 1 生成一個隨機字串: "fkg8qxjby49c25jx9s1h4g7tgfvrhbgq" 2 response.set_cookie(sessionid , fkg8qxjby49c25jx9s1h4g7tgfvrhbgq) 3 在diango-session 表中建立一條記錄 session_key session_data expire_date fkg8qxjby49c25jx9s1h4g7tgfvrhbgq OTJiYWMyNzQwMTkwZWQ3YWQzMDQ2YmY...... 時間日期 4 不同的賬戶在相同遊覽器第一次登入django-session表裡面會新增一條記錄,如果相同的遊覽器不同的賬戶登入過,django-session表 session_key對應的key資料不會變,session_daa,expire_date資料會更新, """ if request.method == "POST": user = request.POST.get('user') pwd = request.POST.get('pwd') status = UserInfo.objects.filter(user=user, pwd=pwd).first() msg = {"user": None, 'msg': None} if status: msg['user'] = status.user # 設定session request.session['is_login'] = True request.session['username'] = status.user # 設定登入時間 now_time = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S") request.session['last_visit_time'] = now_time else: msg['msg'] = '賬戶或密碼輸入錯誤' return JsonResponse(msg) return render(request, 'login/login.html') def login_out(request): """ del request.session['is_login'] 只會刪除is_login一個鍵值,djiango_session表對應的session_data 列儲存的對應的資料,不推薦使用這個方法進行登出操作 request.session.flush():刪除當前會話資料並刪除會話Cookie。這用於確保前面的會話資料不可以再次被使用者遊覽訪問 flush()對應操作: 1 首先獲取 sessionid = request.COOKIE.get('sessionid') 2 進行查詢刪除django-session.objects.filter(session-key=sessionid).delete() 3 進行cookie刪除 response.delete_cookie('sessionid', sessionid) :param request: :return: """ # del登出刪除方法不推薦使用 # del request.session['is_login'] # 推薦使用flush方法 request.session.flush() return redirect('/login/') def index(request): """ 獲取djanog_session表資料request.session.get('is_login') is_login:是設定session時key主鍵 :param request: :return: """ is_login = request.session.get('is_login') # is_login獲取為True代表登入成功,可以訪問設定的session頁面,否則跳轉到登入頁面登入後才能訪問 if is_login: # 獲取session設定使用者名稱 username = request.session.get('username') # 獲取session設定登入時間 last_visit_time = request.session.get('last_visit_time') return render(request, "login/index.html", locals()) else: return redirect('/login/')
5、Django預設支援Session,並且預設是將Session資料儲存在資料庫django_session表中。session相關引數,需要在settings.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,預設修改之後儲存(預設)