day74html
什么是会话跟踪python
咱们须要先了解一下什么是会话!能够把会话理解为客户端与服务器之间的一次会晤,在一次会晤中可能会包含屡次请求和响应。例如你给10086打个电话,你就是客户端,而10086服务人员就是服务器了。从双方接通电话那一刻起,会话就开始了,到某一方挂断电话表示会话结束。在通话过程当中,你会向10086发出多个请求,那么这多个请求都在一个会话中。
在Web中,客户向某一服务器发出第一个请求开始,会话就开始了,直到客户关闭了浏览器会话结束。
在一个会话的多个请求中共享数据,这就是会话跟踪技术。例如在一个会话中的请求以下: 请求银行主页; 数据库
在这上会话中当前用户信息必须在这个会话中共享的,由于登陆的是张三,那么在转帐和还款时必定是相对张三的转帐和还款!这就说明咱们必须在一个会话过程当中有共享数据的能力。浏览器
咱们知道HTTP协议是无状态协议,也就是说每一个请求都是独立的!没法记录前一次请求的状态。但HTTP协议中可使用Cookie来完成会话跟踪!在Web开发中,使用session来完成会话跟踪,session底层依赖Cookie技术。、服务器
cookie的由来cookie
你们都知道HTTP协议是无状态的。session
无状态的意思是每次请求都是独立的,它的执行状况和结果与前面的请求和以后的请求都无直接关系,它不会受前面的请求响应状况直接影响,也不会直接影响后面的请求响应状况。dom
一句有意思的话来描述就是人生只如初见,对服务器来讲,每次的请求都是全新的 ui
状态能够理解为客户端和服务器在某次会话中产生的数据,那无状态的就觉得这些数据不会被保留。会话中产生的数据又是咱们须要保存的,也就是说要“保持状态”。所以Cookie就是在这样一个场景下诞生。加密
其实Cookie是key-value结构,相似于一个python中的字典。随着服务器端的响应发送给客户端浏览器。而后客户端浏览器会把Cookie保存起来,当下一次再访问服务器时把Cookie再发送给服务器。 Cookie是由服务器建立,而后经过响应发送给客户端的一个键值对。客户端会保存Cookie,并会标注出Cookie的来源(哪一个服务器的Cookie)。当客户端向服务器发出请求时会把全部这个服务器Cookie包含在请求中发送给服务器,这样服务器就能够识别客户端了
cookie的工做原理是:由服务器产生内容,浏览器收到请求后保存在本地;当浏览器再次访问时,浏览器会自动带上Cookie,这样服务器就能经过Cookie的内容来判断这个是“谁”了。
上面的数据只是HTTP的Cookie规范,但在浏览器大战的今天,一些浏览器为了战胜对手,为了展示本身的能力起见,可能对Cookie规范“扩展”了一些,例如每一个Cookie的大小为8KB,最多可保存500个Cookie等!但也不会出现把你硬盘占满的可能!
注意,不一样浏览器之间是不共享Cookie的。也就是说在你使用IE访问服务器时,服务器会把Cookie发给IE,而后由IE保存起来,当你在使用FireFox访问服务器时,不可能把IE保存的Cookie发送给服务器。
若是服务器端发送重复的Cookie那么会覆盖原有的Cookie,例如客户端的第一个请求服务器端发送的Cookie是:Set-Cookie: a=A;第二请求服务器端发送的是:Set-Cookie: a=AA,那么客户端只留下一个Cookie,即:a=AA。
浏览器中按F12,点network---cookies就能看到
cookie:保存在客户端的键值对!
request.COOKIES['key'] request.get_signed_cookie(key, default=RAISE_ERROR, salt='', max_age=None)
参数:
rep = HttpResponse(...) rep = render(request, ...) rep.set_cookie(key,value) rep.set_signed_cookie(key,value,salt='加密盐')
参数:
def logout(request): rep = redirect("/login/") rep.delete_cookie("user") # 删除用户浏览器上以前设置的usercookie值 return rep
def login_auth(func): def inner(request,*args,**kwargs): next_url=request.get_full_path() if request.COOKIES.get('is_login'): return func(request,*args,**kwargs) else: return redirect('cookie_login/?next=%s'%next_url) return inner @login_auth def cookie_order(request): return HttpResponse('我是订单页面') @login_auth def cookie_index(request): name=request.COOKIES.get('username') return render(request,'cookie_index.html',{'name':name}) def cookie_login(request): if request.method =='POST': next_url=request.GET.get('next') name=request.POST.get('name') password=request.POST.get('password') if name == 'lqz' and password == '123': import datetime now=datetime.datetime.now().strftime('%Y-%m-%d %X') print(now) obj=redirect(next_url) obj.set_cookie('is_login',True) obj.set_cookie('username',name) obj.set_cookie('login_time',now) return obj return render(request, 'cookie_login.html')
wupeiqi/articles/5246483.html
做业:
做业讲解 day75 视频16章2节
删除session
删除数据库文件 或者删除session的cookie。