<div class="markdown-here-wrapper" data-md-url="https://i.cnblogs.com/EditPosts.aspx?postid=9962659">
<h1 id="cookie" style="margin: 20px 0px 10px; padding: 0px; font-weight: bold; color: black; font-size: 24px; border-bottom: 2px solid #aaaaaa;">cookie
<blockquote style="margin: 1.2em 0px; border-left: 4px solid #dddddd; padding: 0px 1em; color: #777777; quotes: none;">
<p style="margin: 0px 0px 1.2em !important; font-size: 16px; line-height: 1.75em; padding-right: 0.5em; padding-left: 0.5em;">Cookie 是在 HTTP 协议下,服务器或脚本可以维护客户工作站上信息的一种方式。Cookie 是由 Web 服务器保存在用户浏览器(客户端)上的小文本文件,它可以包含有关用户的信息。无论何时用户链接到服务器,Web 站点都可以访问 Cookie 信息
用户浏览器中写下的信息,用来存储用户当前的状态或该用户相关的信息,如是否已经登录。使用cookie的原因:HTTP协议是无状态的协议。一旦数据交换完毕,客户端与服务器端的连接就会关闭,再次交换数据需要建立新的连接。
用户登录的例子:用户登录后,在其浏览器中写入username键值对,并在其他页面判断是否有username
:
:
render(req,,{: })
<span class="hljs-function" style="color: #407ee7;"><span class="hljs-keyword" style="color: #6666ea;">def</span> <span class="hljs-title" style="color: #766e6b;">post</span><span class="hljs-params" style="color: #df5320;">(self,**kwargs)</span>:</span>
user = req.POST.get(<span class="hljs-string" style="color: #5ab738;">'user'</span>)
pwd = req.POST.get(<span class="hljs-string" style="color: #5ab738;">'pwd'</span>)
c = models.Administrator.objects.filter(username=user,password=pwd).count()
<span class="hljs-keyword" style="color: #6666ea;">if</span> c > <span class="hljs-number" style="color: #df5320;">0</span>:
rep = redirect(<span class="hljs-string" style="color: #5ab738;">'/index/'</span>)
newuser = user.encode(<span class="hljs-string" style="color: #5ab738;">'utf-8'</span>).decode(<span class="hljs-string" style="color: #5ab738;">'latin-1'</span>)
rep.set_cookie(<span class="hljs-string" style="color: #5ab738;">'username'</span>,newuser,max_age=<span class="hljs-number" style="color: #df5320;">10</span>)
<span class="hljs-keyword" style="color: #6666ea;">return</span> rep
<span class="hljs-keyword" style="color: #6666ea;">else</span>:
massage = <span class="hljs-string" style="color: #5ab738;">'<a href="/tag/yonghuming/" target="_blank" class="keywords">用户名</a>或密码<a href="/tag/cuowu/" target="_blank" class="keywords">错误</a>'</span>
<span class="hljs-keyword" style="color: #6666ea;">return</span> render(req,{<span class="hljs-string" style="color: #5ab738;">'massage'</span>: massage})
<span class="hljs-function" style="color: #407ee7;"><span class="hljs-keyword" style="color: #6666ea;">def
<span class="hljs-title" style="color: #766e6b;">index<span class="hljs-params" style="color: #df5320;">(req):
username=req.COOKIES.get(<span class="hljs-string" style="color: #5ab738;">'username')
<span class="hljs-keyword" style="color: #6666ea;">if username:
newuser=username.encode(<span class="hljs-string" style="color: #5ab738;">'latin-1').decode(<span class="hljs-string" style="color: #5ab738;">'utf-8')
<span class="hljs-keyword" style="color: #6666ea;">return render(req,<span class="hljs-string" style="color: #5ab738;">"app1/index.html",{<span class="hljs-string" style="color: #5ab738;">"name": newuser})
<span class="hljs-keyword" style="color: #6666ea;">return redirect(<span class="hljs-string" style="color: #5ab738;">"/login")
<p style="margin: 0px 0px 1.2em !important; font-size: 16px; line-height: 1.75em; padding-right: 0.5em; padding-left: 0.5em;">查看set_cookie参数
,max_age=None,expires=None,path=,domain=None,secure=False,httponly=False,samesite=None):
- 功能类似,如果不设置expires,函数会根据max_age自动设置expires,原因是ie浏览器需要expires
- 属性设置为true时,cookie只有在https协议下才能上传到服务器,而在http协议下是没法上传的
- 获取和修改
- 功能,此标志可防止cookie在跨站点请求中发送,从而防止CSRF攻击并使某些方法无法窃取会话cookie。None表示不适用此标志,还有Strict与Lax参数,具体查看
删除cookie
)
用户相关信息是存放在客户的浏览器上,这样导致你的相关信息容易被暴露,让别人更容易进行cookie欺骗,如果可以将相关信息存放到服务器端,那么这种风险就会相对较低一些。使用的方式就是session客户端浏览器访问服务器的时候,服务器把客户端信息以某种形式记录在服务器上叫做session,当客户端浏览器再次访问时只需要从该Session中查找该客户的状态就可以了。客户端识别是哪一个用户的方式为为其分配一个SessionId。session内部也是通过cookie实现的。
c > :
req.session[] =
req.session[] = user
redirect()
:
massage = 用户名或密码错误'
render(req,{: massage})
用户是否登录的装饰器
:
:
is_login = request.session.get()
is_login:
func(request,**kwargs)
:
redirect()
inner
函数,只需要为其添加auth装饰器即可这里发现,对于设置session和拿取session,和cookie的操作方式类似,那么它将设置的信息存储到了哪呢?答案是存到了数据库中在数据库中发现了一张diango_session的表,存储的信息为
方法
- 删除某条
- 删除所有
- 输出为dict_keys([‘is_login’,‘username’]),可for循环,不可以通过索引取值
- 输出dict_values([True,‘sfencs’]),同上
- 输出dict_items([(‘is_login’,True),(‘username’,‘sfencs’)]),同上
- 用户session的随机字符串
- 删除
- 用户session的随机字符串在数据库中是否存在
- 用户关闭浏览器session就会失效。如果value是None,session会依赖全局session失效策略。
SESSION_COOKIE_PATH =
SESSION_COOKIE_DOMAIN =
SESSION_COOKIE_SECURE =
SESSION_COOKIE_HTTPONLY = 支持http传输(默认)
SESSION_COOKIE_AGE =
SESSION_EXPIRE_AT_BROWSER_CLOSE = 关闭浏览器使得Session过期(默认)
SESSION_SAVE_EVERY_REQUEST = 修改之后才保存(默认)
SESSION_COOKIE_PATH =
SESSION_COOKIE_DOMAIN =
SESSION_COOKIE_SECURE =
SESSION_COOKIE_HTTPONLY = 支持http传输(默认)
SESSION_COOKIE_AGE =
SESSION_EXPIRE_AT_BROWSER_CLOSE = 关闭浏览器使得Session过期(默认)
SESSION_SAVE_EVERY_REQUEST = 修改之后才保存(默认)