日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

05-session-会话跟踪技术

發(fā)布時間:2024/4/17 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 05-session-会话跟踪技术 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

1、session簡介

Django中默認支持Session,其內(nèi)部提供了5種類型的Session供開發(fā)者使用:

  • 數(shù)據(jù)庫(默認)
  • 緩存
  • 文件
  • 緩存+數(shù)據(jù)庫
  • 加密cookie

?

Session是服務器端技術,利用這個技術,服務器在運行時可以 為每一個用戶的瀏覽器創(chuàng)建一個其獨享的session對象,

由于 session為用戶瀏覽器獨享,所以用戶在訪問服務器的web資源時 ,可以把各自的數(shù)據(jù)放在各自的session中,

當用戶再去訪問該服務器中的其它web資源時,其它web資源再從用戶各自的session中 取出數(shù)據(jù)為用戶服務。

  

2、session之保存登錄狀態(tài)信息

1、寫session

?

?

?

2、session讀取

?

?

?

?

?

3、不同瀏覽器,會創(chuàng)建不同的session_id

?

?

?

4、views視圖代碼

def login_session(request):if request.method == "POST":user = request.POST.get("user")pwd = request.POST.get("pwd")# user_obj = UserInfo.objects.filter(username=user, password=pwd) # AttributeError: 'QuerySet' object has no attribute 'username'user_obj = UserInfo.objects.filter(username=user, password=pwd).first()if user_obj:# 設置sessionrequest.session['is_login'] = Truerequest.session['username'] = user_obj.username"""設置session步驟1.生成隨機字符串 q4r5q4rfar325432.response.set_cookie("session_id",q4r5q4rfar32543)3.在django-session表創(chuàng)建一條記錄:session-key session-dataq4r5q4rfar32543 {"is_login":True, "username":"alex"}"""return HttpResponse("登錄成功")return render(request, 'login_session.html')def index_session(request):# 獲取sessionis_login = request.session.get("is_login")print("is_login:", is_login) # Trueif not is_login:return redirect("/login_session/")username = request.session.get("username")"""獲取session流程1 request.COOKIE.get("session") # wspn39juwcrrqxs0916ftmlcvyl7c1gg2 django-session表中過濾記錄:在django-session表中創(chuàng)建一條記錄:session-key session-datawspn39juwcrrqxs0916ftmlcvyl7c1gg {"is_login":True, "username":"alex"}obj = django-session.object.filter(session-key=wspn39juwcrrqxs0916ftmlcvyl7c1gg)3 obj.session-data.get("is_login")"""return render(request, "index_session.html", {"username": username}) View Code

?

?

?

4、session應用之保存上次登錄時間

?

?

?

5、前部分session代碼

modles

from django.db import modelsclass UserInfo(models.Model):username = models.CharField(max_length=32)password = models.CharField(max_length=32)

?

主url

from django.contrib import admin from django.urls import path, re_path, includeurlpatterns = [path('admin/', admin.site.urls),re_path(r'^', include(('app01.urls', 'app01'))) ]

?

?

url

from django.urls import path, re_path, include from app01 import viewsurlpatterns = [re_path(r'^login_session/$', views.login_session, name='login_session'),re_path(r'^index_session/$', views.index_session, name='index_session'), ]

?

?

views

from django.shortcuts import render, HttpResponse, redirectfrom app01.models import UserInfodef login_session(request):if request.method == "POST":user = request.POST.get("user")pwd = request.POST.get("pwd")user_obj = UserInfo.objects.filter(username=user, password=pwd).first()if user_obj:# 設置sessionrequest.session['is_login'] = Truerequest.session['username'] = user_obj.usernamereturn HttpResponse("登錄成功")return render(request, 'login_session.html')def index_session(request):# 獲取sessionis_login = request.session.get("is_login")print("is_login:", is_login) # Trueif not is_login:return redirect("/login_session/")username = request.session.get("username")last_visit_time = request.session.get("last_visit_time", "") # get到last_time response = render(request, "index_session.html", {"username": username, "last_visit_time": last_visit_time})import datetimenow = datetime.datetime.now().strftime("%Y-%m-%d %X")request.session["last_visit_time"] = now # 設置時間return response

?

?

?

?

模板層

login_session.html

<!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><title>Title</title> </head> <body><form action="" method="post">{% csrf_token %}username <input type="text" name="user">password <input type="password" name="pwd"><input type="submit" value="登錄"> </form></body> </html>

?

?

index_session.html

<!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><title>Title</title> </head> <body> <h3>hi {{ username }}</h3> <p>上次登錄時間:{{ last_visit_time }}</p> </body> </html>

?

?

5、session的更新操作

?

同一個瀏覽器,后面的session_data 會覆蓋前面的數(shù)據(jù)

  

?

6、基于session的注銷功能

3、刪除Sessions值del request.session["session_name"] 4、flush()刪除當前的會話數(shù)據(jù)并刪除會話的Cookie。這用于確保前面的會話數(shù)據(jù)不可以再次被用戶的瀏覽器訪問

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

  

logout視圖

def logout(request):# 刪除session值del request.session["is_login"]del request.session["username"]# 刪除全部數(shù)據(jù) request.session.flush()"""刪除session流程1 random_str = request.COOKIE.get("sessionid")2 django-session.objects.filter(session-key=random_str).delete()3 response.delete_cookie("sessionid", random_str)"""return redirect("/login_session/")

?

?index_seeion.html

<!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><title>Title</title> </head> <body> <h3>hi {{ username }}</h3> <p>上次登錄時間:{{ last_visit_time }}</p> <a href="/logout/">注銷</a> </body> </html>

?

?

?

?

7、session的配置參數(shù)

?

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,默認修改之后才保存

  

session失效時間15s

?

?

每次訪問刷新15s

?

SESSION_COOKIE_NAME = "yuan" # Session的cookie保存在瀏覽器上時的key,即:sessionid=隨機字符串 SESSION_COOKIE_PATH = "/" # Session的cookie保存的路徑 SESSION_COOKIE_AGE = 15 # Session的cookie失效日期 SESSION_EXPIRE_AT_BROWSER_CLOSE = False # 是否關閉瀏覽器使得Session過期 SESSION_SAVE_EVERY_REQUEST = True # 是否每次請求都保存Session,默認修改之后才保存

?

  

?

8、session練習

1 登錄案例?

需要的頁面: #login.html:登錄頁面,提供登錄表單; #index1.html:主頁,顯示當前用戶名稱,如果沒有登錄,顯示您還沒登錄; #index2.html:主頁,顯示當前用戶名稱,如果沒有登錄,顯示您還沒登錄;

思考,如果第二個人再次再同一個瀏覽器上登錄,django-session表會怎樣?

2 驗證碼案例

驗證碼可以去識別發(fā)出請求的是人還是程序!當然,如果聰明的程序可以去分析驗證碼圖片!但分析圖片也不是一件容易的事,因為一般驗證碼圖片都會帶有干擾線,人都看不清,那么程序一定分析不出來。

PIL 模塊

  

?

9、cookie與 session總結

# cookie總結 1 response.set_cookie(key,value) 2 request.COOKIE.get(key)

?

?

?

# sessiono總結 3 request.session[key] = value # 寫session 注意django對應操作'''if request.COOKIE.get("session_id") wspn39juwcrrqxs091更新在django-session表中創(chuàng)建一條記錄:session-key session-datawspn39juwcrrqxs0916ftmlcvyl7c1gg 更新數(shù)據(jù)else:1.生成隨機字符串 q4r5q4rfar325432.response.set_cookie("session_id",q4r5q4rfar32543)3.在django-session表創(chuàng)建一條記錄:session-key session-dataq4r5q4rfar32543 {"is_login":True, "username":"alex"'''4 request.session[key] # 讀session'''1 request.COOKIE.get("session") # wspn39juwcrrqxs0916ftmlcvyl7c1gg2 django-session表中過濾記錄:在django-session表中創(chuàng)建一條記錄:session-key session-datawspn39juwcrrqxs0916ftmlcvyl7c1gg {"is_login":True, "username":"alex"obj = django-session.object.filter(session-key=wspn39juwcrrqxs0916ftmlcvyl73 obj.session-data.get("is_login")'''5. request.session.flush() # 刪除session"""1 random_str = request.COOKIE.get("sessionid")2 django-session.objects.filter(session-key=random_str).delete()3 response.delete_cookie("sessionid", random_str)"""

?

轉載于:https://www.cnblogs.com/venicid/p/9314852.html

總結

以上是生活随笔為你收集整理的05-session-会话跟踪技术的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。