- URL重寫
http://www.abc.com/path/resource?foo=bar
- 隱藏域(隱式表單域)- 埋點
<form action="" method="post">
<input type="hidden" name="foo" value="bar">
</form>
- cookie / localStorage / sessionStorage
通過請求頭直接傳給服務器
后端實現(xiàn)用戶跟蹤的方式?(Django/DRF)
1.通過響應對象往瀏覽器中寫入cookie(鍵值對)
- 創(chuàng)建cookie:resp.set_cookie('name', 'maggie')
def show_subjects(request):
subjects = Subject.objects..all()
resp = render(request, 'subject.html', {'subjects', subjects})
resp.set_cookie('name', 'maggie')
return resp
- 拿到瀏覽器的cookie(用鍵取值)(django\DRF)
request.COOKIES['name']
- cookie-session
用戶登錄post表單——>創(chuàng)建session(字典形式——> 用戶瀏覽器cookie中保存sessionid;同時此用戶的session保存在內(nèi)存中(redis)——>用戶下次請求時椎组,通過cookie中放的sessionid找到服務器對象的session(用戶)
- 表單驗證通過后奋献,創(chuàng)建用戶對象的session
request.session['user'] = user
- 拿到用戶對象瀏覽器的sessin
request.session.get('user', None)
- 清除session
request.session.flush()
- JWT
用戶登錄post表單——>表單驗證通過——>生成JWT編碼(token)——>返回瀏覽器payload(userid/exp等)案训、token——>token保存在cookie/localstorage/sessionstorage中
- 生成JWT編碼(encode)店枣,并返回payload
if user:
payload = {
'exp': datetime.datetime.utcnow() + datetime.timedelta(days=1),
'data': {'userid': user.userid}
}
token = jwt.encode(payload, SECRET_KEY, algorithm='HS256').decode()
- 拿到瀏覽器token,JWT解碼(decode),使用paycode中data的userid進行認證
token = request.META.get('HTTP_TOKEN')
if token:
try:
result = jwt.decode(token, SECRET_KEY, algorithm='HS256')
user = User.objects.get(userid=result['data']['userid'])
return user, token
cookie / localStorage / sessionStorage
什么是cookie?
它是網(wǎng)站實現(xiàn)用戶跟蹤最重要的手段速警。
網(wǎng)站可以利用cookies跟蹤統(tǒng)計用戶訪問該網(wǎng)站的習慣叹誉,比如什么時間訪問,訪問了哪些頁面闷旧,在每個網(wǎng)頁的停留時間等桂对。利用這些信息,一方面是可以為用戶提供個性化的服務鸠匀,另一方面,也可以作為了解所有用戶行為的工具逾柿,對于網(wǎng)站經(jīng)營策略的改進有一定參考價值缀棍。
localStorage
用戶關閉瀏覽器時,token不會丟失。
sessionStorage
用戶在瀏覽器頁面之間跳轉(zhuǎn)時,token不會丟失机错。
session
什么是session爬范?
Session 對象存儲特定用戶會話所需的屬性及配置信息。這樣弱匪,當用戶在應用程序的 Web 頁之間跳轉(zhuǎn)時青瀑,存儲在 Session 對象中的變量將不會丟失,而是在整個用戶會話中一直存在下去萧诫。
session應該放在哪里斥难?
內(nèi)存中
JWT(Json Web Token)
參考網(wǎng)址:(阮一峰)
客戶端收到服務器返回的 JWT,可以儲存在 Cookie 里面帘饶,也可以儲存在 localStorage哑诊。
此后,客戶端每次與服務器通信及刻,都要帶上這個 JWT镀裤。你可以把它放在 Cookie 里面自動發(fā)送,但是這樣不能跨域缴饭,所以更好的做法是放在 HTTP 請求的頭信息Authorization字段里面暑劝。