使用者身份校驗是web訪問時的重要步驟。常用的身份校驗方式有cookie,session和jwt三種。其中cookie和session是較傳統的校驗方式,其採用將使用者資訊儲存在伺服器或瀏覽器中,使用者訪問時,攜帶相關資訊,有伺服器進行校驗。最近流行的jwt令牌是一種分布式的跨域驗證機製造。其允許跨域,另外將token儲存到瀏覽器,避免了採用資料庫儲存使用者資訊。在分布式伺服器執行場合,其校驗更加簡單,高效。其由頭部,載荷和簽名三部分組成。頭部一般是token的型別、加密方式的宣告資訊;載荷部分是token的使用者身份資訊,頭部和載荷均採用base64演算法進行加密。通過base64解密即可查閱使用者資訊,因此一般存放的是使用者非機密資訊。簽名部分是通過將頭部,載荷部分以及使用者的加密字段進行加密生成的字串,這部分資訊用來驗證令牌的有效性。
1.flask中session的儲存有兩種:自帶的session類和flask_session包。自帶的session類中,其session資訊是儲存在瀏覽器內,而非客戶端。而採用flask_session包可以改變session的儲存位置,可以儲存到redis,sqlalchemy,mongodb,快取等資料庫中。利用session記錄使用者登入次數:
)hellobaby"#
用於加密session資訊
#使用者登陸後設定session資訊
/user")
defindex():
session[
"name
"]="
hello,user
"session[
"count
"]=1
return
"hello,"#
記錄使用者登陸的次數,
/hello")
defuser():
name=session.get("
name")
count=session.get("
count")
print(count,9999)
ifnot
all([name,count]):
return
"請登陸
"num=count+1session[
"count
"]=num
return
str(num)
if__name__ == '
__main__':
結果:查詢session資訊,因是加密,資訊較安全。
cookie:session=eyjjb3vudci6mswibmftzsi6imhlbgxvlhvzzxiifq.ebtdcw.skwftljbdc-iiglwqcgrs16bzhg
2.利用cookie記錄使用者登入次數
#使用者登陸後設定cookie資訊
/user")
defindex():
resp=response("
hello")
resp.set_cookie(
"name
","user1
",3600)
resp.set_cookie(
"count
", "
1", 3600)#
cookie的值1為str
return
resp
#記錄使用者登陸的次數,
/hello")
defuser():
name=request.cookies.get("
name")
count=request.cookies.get("
count")
print(count,9999)
ifnot
all([name,count]):
return
"請登陸
"num=str(int(count)+1)
resp=response(num)
resp.set_cookie(
"count
", num, 3600)
return
resp
if__name__ == '
__main__':
3.基於flask_session包進行session資訊的儲存,其可以選擇將session資訊儲存在redis,快取或sqlalchemy,關係型資料庫等。)#
class
secret_key="
20e4f6b0-b631-4582-b2e0-00190c7d006f
"session_type="
redis
"session_permanent=false
session_use_signer=true
permanent_session_lefttime=86400*2session_redis=strictredis(host="
127.0.0.1
",port=6379)#
建立redis連線
#使用者登陸後設定cookie資訊
/user")
defindex():
session[
"name
"]="
user1
"session[
"count
"]=1
return
"login sccess"#
記錄使用者登陸的次數,
/hello")
defuser():
name=session.get("
name")
count=session.get("
count")
print(count,9999)
ifnot
all([name,count]):
return
"請登陸
"num=str(int(count)+1)
resp=response(num)
session[
"count
"] =num
return
resp
if__name__ == '
__main__':
正確理解web互動中的cookie與session
cookie儲存在客戶端的純文字檔案 使用者請求伺服器指令碼 指令碼設定cookie內容 並 通過http response傳送cookie內容到客戶端並儲存在客戶端本地 客戶端再次傳送http請求的時候會將本地的cookie內容新增到http請求頭髮送給伺服器,伺服器端指令碼可以呼叫cookie內...
flask中cookie和session設定
在 中,http請求是無狀態的。也就是說即使第一次和伺服器連線後並且登入成功後,第二次請求伺服器依然不能知道當前請求是哪個使用者。cookie 的出現就是為了解決這個問題,第一次登入後伺服器返回一些資料 cookie 給瀏覽器,然後瀏覽器儲存在本地,當該使用者傳送第二次請求的時候,就會自動的把上次請...
flask中cookie和session介紹
在 中,http請求是無狀態的。也就是說即使第一次和伺服器連線後並且登入成功後,第二次請求伺服器依然不能知道當前請求是哪個使用者。cookie的出現就是為了解決這個問題,第一次登入後伺服器返回一些資料 cookie 給瀏覽器,然後瀏覽器儲存在本地,當該使用者傳送第二次請求的時候,就會自動的把上次請求...