會話保持是指在負載均衡器上的一種機制,能夠識別客戶端與服務器之間交互過程的關連性,在做負載均衡的同時還保證一系列相關連的訪問請求都會分配到一臺機器上。
用人話來表述就是:在一次會話過程當中發起的多個請求都會落到同一臺機器上。
cookie:客戶端瀏覽器上的鍵值對,缺陷是:數據不安全 以後有了 session:服務端的鍵值對(內存,數據庫,redis,文件),客戶端只放一個隨機字符串,安全(即使是泄露,也只是單我的的隨機字符串被泄露,別人的猜不出來),缺陷是:對服務端壓力大 以後有了 token:分三段:頭.荷載.簽名 -header(公司信息,加密方式。。。) -payload(荷載,真正有用的數據部分,放用戶id,用戶名字。。(是拼在token串中的,因此就放在客戶端了,客戶端發請求會攜帶過去,這樣子像cookie固然不安全,
因此有了signature)) -signature(簽名,爲了安全,把頭和荷載部分經過不可逆加密算法加密---》獲得一個簽名)
好比token:
head.{name:lili,age:18}.eseetsweasdca
base64加碼後變成:
asdfasfd.asdfasdf.asdfasdfaeraewhtml
由於token框架都要用,因此網上開源出drf-jwt模塊
-更詳細看演變:https://www.cnblogs.com/liuqingzheng/articles/9509779.html
3、drf-jwt模塊redis
1.快速使用算法
-快速使用:(默認使用的是auth的user表) -1 建立用戶 -2 在路由中配置path('login/', obtain_jwt_token), -3 在postman中測試,用戶名密碼輸入剛剛建立的用戶就能夠生成token -4 讓一個視圖必須登陸之後才能訪問 -authentication_classes = [JSONWebTokenAuthentication, ] #認證(此認證類便可的登陸訪問,又可不登陸訪問,因此要加權限) -permission_classes = [IsAuthenticated,]#權限 -5 讓一個視圖能夠登陸後訪問,也能夠不登陸訪問 -authentication_classes = [JSONWebTokenAuthentication, ] -6 用postman測試,在請求頭中加入 -key:Authorization value:jwt+空格+token串
2.本身寫基於jwt的認證類(登陸了能訪問,不登陸就不能訪問)數據庫
-本身寫基於jwt的認證類(登陸了能訪問,不登陸就不能訪問) class JwtAuthentication(BaseJSONWebTokenAuthentication): def authenticate(self, request): #取出token token=request.GET.get('token') token=request.META.get('HTTP_AUTHORIZATION') try: # 驗證token是否正確 payload = jwt_decode_handler(token) except jwt.ExpiredSignature: raise AuthenticationFailed('過時了') except jwt.DecodeError: raise AuthenticationFailed('解碼錯誤') except jwt.InvalidTokenError: raise AuthenticationFailed('不合法的token') #也能夠只寫一個except Exception('token不合法') user=self.authenticate_credentials(payload) return (user, token) -自定製認證類的使用方式: -全局使用 -局部使用-更詳細JWT請看:https://www.cnblogs.com/guojieying/p/13966264.html