微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Django之cookie&session

<div class="markdown-here-wrapper" data-md-url="https://i.cnblogs.com/EditPosts.aspx?postid=9962659"&gt;
<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协议是无状态的协议。一旦数据交换完毕,客户端与服务器端的连接就会关闭,再次交换数据需要建立新的连接。

ottom: 2px solid #aaaaaa;">在Django中使用cookie

一个用户登录的例子:用户登录后,在其浏览器中写入username键值对,并在其他页面判断是否有username

display: block; overflow: auto; overflow-x: auto; background: #f1efee; color: #68615e; text-size-adjust: none;">
 arams" style="color: #df5320;">(views.View):
     arams" style="color: #df5320;">(self,req,*args,**kwargs):
         render(req,,{: })
<span class="hljs-function" style="color: #407ee7;"&gt;<span class="hljs-keyword" style="color: #6666ea;"&gt;def</span> <span class="hljs-title" style="color: #766e6b;"&gt;post</span><span class="hljs-p<a href="/tag/ara/" target="_blank" class="keywords">ara</a>ms" style="color: #df5320;"&gt;(self,**<a href="/tag/kwargs/" target="_blank" class="keywords">kwargs</a>)</span>:</span>
    user = req.POST.get(<span class="hljs-string" style="color: #5ab738;"&gt;'user'</span>)
    pwd = req.POST.get(<span class="hljs-string" style="color: #5ab738;"&gt;'pwd'</span>)
    c = models.Administrator.objects.filter(username=user,password=pwd).count()
    <span class="hljs-keyword" style="color: #6666ea;"&gt;if</span> c > <span class="hljs-number" style="color: #df5320;"&gt;0</span>:
        rep = redirect(<span class="hljs-string" style="color: #5ab738;"&gt;'/index/'</span>)
        newuser = user.encode(<span class="hljs-string" style="color: #5ab738;"&gt;'utf-8'</span>).decode(<span class="hljs-string" style="color: #5ab738;"&gt;'latin-1'</span>)
        rep.set_cookie(<span class="hljs-string" style="color: #5ab738;"&gt;'username'</span>,newuser,max_age=<span class="hljs-number" style="color: #df5320;"&gt;10</span>)
        <span class="hljs-keyword" style="color: #6666ea;"&gt;return</span> rep
    <span class="hljs-keyword" style="color: #6666ea;"&gt;else</span>:
        massage = <span class="hljs-string" style="color: #5ab738;"&gt;'<a href="/tag/yonghuming/" target="_blank" class="keywords">用户名</a>或<a href="/tag/mimap/" target="_blank" class="keywords">密码</a><a href="/tag/cuowu/" target="_blank" class="keywords">错误</a>'</span>
    <span class="hljs-keyword" style="color: #6666ea;"&gt;return</span> render(req,{<span class="hljs-string" style="color: #5ab738;"&gt;'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参数

display: block; overflow: auto; overflow-x: auto; background: #f1efee; color: #68615e; text-size-adjust: none;">
 arams" style="color: #df5320;">(self,key,value=,max_age=None,expires=None,path=,domain=None,secure=False,httponly=False,samesite=None):
  • 功能类似,如果不设置expires,函数会根据max_age自动设置expires,原因是ie浏览器需要expires
  • 默认为’/‘,表示所有url
  • 默认为当前域名
  • 属性设置为true时,cookie只有在https协议下才能上传到服务器,而在http协议下是没法上传
  • 获取和修改
  • 功能,此标志可防止cookie在跨站点请求中发送,从而防止CSRF攻击并使某些方法无法窃取会话cookie。None表示不适用此标志,还有Strict与Lax参数,具体查看goproject.com/en/2.1/ref/settings/#std:setting-SESSION_COOKIE_SAMESITE">https://docs.djangoproject.com/en/2.1/ref/settings/#std:setting-SESSION_COOKIE_SAMESITE

删除cookie

display: block; overflow: auto; overflow-x: auto; background: #f1efee; color: #68615e; text-size-adjust: none;">response.delete_cookie()

ottom: 2px solid #aaaaaa;">session

在这里我们可以叫它会话,既然是会话,那么就是一段时间的交流,交流的状态就需要保持着。对于cookie来说,数据或者用户相关信息是存放在客户的浏览器上,这样导致你的相关信息容易被暴露,让别人更容易进行cookie欺骗,如果可以将相关信息存放到服务器端,那么这种风险就会相对较低一些。使用的方式就是session客户端浏览器访问服务器的时候,服务器把客户端信息以某种形式记录在服务器上叫做session,当客户端浏览器再次访问时只需要从该Session中查找该客户的状态就可以了。客户端识别是哪一个用户的方式为为其分配一个SessionId。session内部也是通过cookie实现的。

ottom: 2px solid #aaaaaa;">在Django中使用session

登录认证的例子首先登录视图函数

 c > :
            req.session[] = 
            req.session[] = user
             redirect()
        :
            massage = 用户名或密码错误'
         render(req,{: massage})

用户是否登录的装饰器

display: block; overflow: auto; overflow-x: auto; background: #f1efee; color: #68615e; text-size-adjust: none;">
 arams" style="color: #df5320;">(func):
     arams" style="color: #df5320;">(request,**kwargs):
        is_login = request.session.get()
         is_login:
             func(request,**kwargs)
        :
             redirect()
     inner

函数,只需要为其添加auth装饰器即可这里发现,对于设置session和拿取session,和cookie的操作方式类似,那么它将设置的信息存储到了哪呢?答案是存到了数据库中在数据库中发现了一张diango_session的表,存储的信息为

ottom: 1px solid #aaaaaa;">session的其他方法

  • 删除某条
  • 删除所有
  • 输出为dict_keys([‘is_login’,‘username’]),可for循环,不可以通过索引取值
  • 输出dict_values([True,‘sfencs’]),同上
  • 输出dict_items([(‘is_login’,True),(‘username’,‘sfencs’)]),同上
  • 用户session的随机字符串
  • 删除
  • 用户session的随机字符串在数据库中是否存在
  • 默认为两周。如果value是个整数,session会在些秒数后失效。如果value是个datatime或timedelta,session就会在这个时间后失效。如果value是0,用户关闭浏览器session就会失效。如果value是None,session会依赖全局session失效策略。

ottom: 1px solid #aaaaaa;">session的配置

display: block; overflow: auto; overflow-x: auto; background: #f1efee; color: #68615e; text-size-adjust: none;">SESSION_COOKIE_NAME =    
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 =           默认修改之后才保存(认)
gluLTEnKS5kZWNvZGUoJ3V0Zi04Jyk8YnI+ICAgICAgICBy ZXR1cm4gcmVuZGVyKHJlcSwgImFwcDEvaW5kZXguaHRtbCIsIHsibmFtZSI6IG5ld3VzZXJ9KTxi cj4gICAgcmV0dXJuIHJlZGlyZWN0KCIvbG9naW4iKTwvcHJlPjxwPmBgYDwvcD48cD7mn6XnnItz ZXRfY29va2ll5Y+C5pWwPC9wPjxwPmBgYHB5dGhvbjwvcD48cHJlPmRlZiBzZXRfY29va2llKHNl bGYsIGtleSwgdmFsdWU9JycsIG1heF9hZ2U9Tm9uZSwgZXhwaXJlcz1Ob25lLCBwYXRoPScvJyw8 YnI+ICAgICAgICAgICAgICAgZG9tYWluPU5vbmUsIHNlY3VyZT1GYWxzZSwgaHR0cG9ubHk9RmFs c2UsIHNhbWVzaXRlPU5vbmUpOjwvcHJlPjxwPmBgYDwvcD48cD4qIGtleSDvvJrplK48L3A+PHA+ KiB2YWx1ZSDvvJrlgLw8L3A+PHA+KiBtYXhfYWdlIO+8mmNvb2tpZeeahOeUn+aViOaXtumXtDwv cD48cD4qJm5ic3A7ZXhwaXJlcyDvvJpjb29raWXnmoTlhbfkvZPov4fmnJ/ml7bpl7Q8L3A+PHA+ 5a6D5ZKMbWF4X2FnZeWKn+iDveexu+S8vO+8jOWmguaenOS4jeiuvue9rmV4cGlyZXPvvIzlh73m lbDkvJrmoLnmja5tYXhfYWdl6Ieq5Yqo6K6+572uZXhwaXJlc++8jOWOn+WboOaYr2ll5rWP6KeI 5Zmo6ZyA6KaBZXhwaXJlczwvcD48cD4qJm5ic3A7cGF0aCDvvJrmjIflrprpgqPkuKp1cmzlj6/k u6Xorr/pl67liLBjb29raWXvvIzpu5jorqTkuLonLyfvvIzooajnpLrmiYDmnIl1cmw8L3A+PHA+ KiBkb21haW4g77ya5oyH5a6a6YKj5Liq5Z+f5ZCN5Lul5Y+K5a6D5LiL6Z2i55qE5a2Q5Z+f5ZCN 5Y+v5Lul6K6/6Zeu6L+Z5LiqY29va2ll77yM6buY6K6k5Li65b2T5YmN5Z+f5ZCNPC9wPjxwPiog c2VjdXJlIO+8mmh0dHBz5a6J5YWo55u45YWz77yM5b2Tc2VjdXJl5bGe5oCn6K6+572u5Li6dHJ1 ZeaXtu+8jGNvb2tpZeWPquacieWcqGh0dHBz5Y2P6K6u5LiL5omN6IO95LiK5Lyg5Yiw5pyN5Yqh 5Zmo77yM6ICM5ZyoaHR0cOWNj+iuruS4i+aYr+ayoeazleS4iuS8oOeahDwvcD48cD4qIGh0dHBv bmx5IO+8mumZkOWItuWPquiDvemAmui/h2h0dHDkvKDovpPvvixKU+aXoOazleWcqOS8oOi+k+S4 reiOt+WPluWSjOS/ruaUuTwvcD48cD4qIHNhbWVzaXRlIO+8muWlveWDj+aYrzIuMeS4reeahOaW sOWKn+iDve+8jOatpOagh+W/l+WPr+mYsuatomNvb2tpZeWcqOi3qOermeeCueivt+axguS4reWP kemAge+8jOS7juiAjOmYsuatokNTUkbmlLvlh7vlubbkvb/mn5Dkupvmlrnms5Xml6Dms5XnqoPl j5bkvJror51jb29raWXjgIJOb25l6KGo56S65LiN6YCC55So5q2k5qCH5b+X77yM6L+Y5pyJU3Ry aWN05LiOTGF45Y+C5pWw77yM5YW35L2T5p+l55yLPGEgaHJlZj0iaHR0cHM6Ly9kb2NzLmRqYW5n b3Byb2plY3QuY29tL2VuLzIuMS9yZWYvc2V0dgluZ3MvI3N0ZDpzZXR0aW5nLVNFU1NJT05fQ09P S0lFX1NBTUVTSVRFIiB0YXJnZXQ9Il9ibGFuayIgZGF0YS1tY2UtaHJlZj0iaHR0cHM6Ly9kb2Nz LmRqYW5nb3Byb2plY3QuY29tL2VuLzIuMS9yZWYvc2V0dgluZ3MvI3N0ZDpzZXR0aW5nLVNFU1NJ T05fQ09PS0lFX1NBTUVTSVRFIj5odHRwczovL2RvY3MuZGphbmdvcHJvamVjdC5jb20vZW4vMi4x L3JlZi9zZXR0aW5ncy8jc3RkOnNldHRpbmctU0VTU0lPTl9DT09LSUVfU0FNRVNJVEU8L2E+PC9w PjxwPiZuYnNwOzwvcD48cD7liKDpmaRjb29raWU8L3A+PHA+YGBgcHl0aG9uPC9wPjxwPnJlc3Bv bnNlLmRlbGV0ZV9jb29raWUoPHNwYW4gY2xhc3M9ImhsanMtc3RyaW5nIj4na2V5Jyk8L3NwYW4+ PC9wPjxwPmBgYDwvcD48cD4jc2Vzc2lvbjwvcD48cD5zZXNzaW9u5pys5oSP5Li65byA5Lya77yM 5Lya6K6u77yM5Zyo6L+Z6YeM5oiR5Lus5Y+v5Lul5Y+r5a6D5Lya6K+d77yM5pei54S25piv5Lya 6K+d77yM6YKj5LmI5bCx5piv5LiA5q615pe26Ze055qE5Lqk5rWB77yM5Lqk5rWB55qE54q25oCB 5bCx6ZyA6KaB5L+d5oyB552A44CCPC9wPjxwPuWvueS6jmNvb2tpZeadpeivtO+8jOaVsOaNruaI luiAheeUqOaIt+ebuOWFs+S/oeaBr+aYr+WtmOaUvuWcqOWuouaIt+eahOa1j+iniOWZqOS4iu+8 jOi/meagt+WvvOiHtOS9oOeahOebuOWFs+S/oeaBr+WuueaYk+iiq+aatOmcsu+8jOiuqeWIq+S6 uuabtOWuueaYk+i/m+ihjGNvb2tpZeasuumqL++8jOWmguaeNowPr+S7peWwhuebuOWFs+S/oeaB r+WtmOaUvuWIsOacjeWKoeWZqOerr++8jOmCo+S5iOi/meenjemjjumZqeWwseS8muebuOWvuei+ g+S9juS4gOS6m+OAguS9v+eUqOeahOaWueW8j+WwseaYr3Nlc3Npb248L3A+PHAgYWxpZ249Imxl ZnQiPuWuouaIt+err+a1j+iniOWZqOiuv+mXruacjeWKoeWZqOeahOaXtuWAme+8jOacjeWKoeWZ qOaKiuWuouaIt+err+S/oeaBr+S7peafkOenjeW9ouW8j+iusOW9leWcqOacjeWKoeWZqOS4iuWP q+WBmnNlc3Npb27vvIzlvZPlrqLmiLfnq6/mtY/op4jlmajlho3mrKHorr/pl67ml7blj6rpnIDo poHku47or6VTZXNzaW9u5Lit5p+l5om+6K+l5a6i5oi355qE54q25oCB5bCx5Y+v5Lul5LqG44CC 5a6i5oi356uv6K+G5Yir5piv5ZOq5LiA5Liq55So5oi355qE5pa55byP5Li65Li65YW25YiG6YWN 5LiA5LiqU2Vzc2lvbklk44CCPC9wPjxwIGFsaWduPSJsZWZ0Ij5zZXNzaW9u5YaF6YOo5Lmf5piv 6YCa6L+HY29va2ll5a6e546w55qE44CCPC9wPjxwPiPlnKhEamFuZ2/kuK3kvb/nlKhzZXNzaW9u PC9wPjxwPuS+neeEtuaYr+eZu+W9leiupOivgeeahOS+i+WtkDwvcD48cD7pppblhYjnmbvlvZXo p4blm77lh73mlbA8L3A+PHA+YGBgcHl0aG9uPC9wPjxwcmU+Y2xhc3MgbG9naW4odmlld3MuVmll dyk6PGJyPiAgICBkZWYgZ2V0KHNlbGYscmVxLCphcmdzLCoqa3dhcmdzKTo8YnI+ICAgICAgICBy ZXR1cm4gcmVuZGVyKHJlcSwgImFwcDEvbG9naW4uaHRtbCIsIHsnbWFzc2FnZSc6ICcnfSk8YnI+ PGJyPiAgICBkZWYgcG9zdChzZWxmLHJlcSwqYXJncywqKmt3YXJncyk6PGJyPiAgICAgICAgdXNl ciA9IHJlcS5QT1NULmdldCgndXNlcicpPGJyPiAgICAgICAgcHdkID0gcmVxLlBPU1QuZ2V0KCdw d2QnKTxicj4gICAgICAgIGMgPSBtb2RlbHMuQWRtaW5pc3RyYXRvci5vYmplY3RzLmZpbHRlcih1 c2VybmFtZT11c2VyLCBwYXNzd29yZD1wd2QpLmNvdW50KCk8YnI+ICAgICAgICBwcmludChjKTxi cj4gICAgICAgIGlmIGMgJmd0OyAwOjxicj4gICAgICAgICAgICByZXEuc2Vzc2lvblsnaXNfbG9n aW4nXSA9IFRydWU8YnI+ICAgICAgICAgICAgcmVxLnNlc3Npb25bJ3VzZXJuYW1lJ10gPSB1c2Vy PGJyPiAgICAgICAgICAgIHJldHVybiByZWRpcmVjdCgnL2luZGV4LycpPGJyPiAgICAgICAgZWxz ZTo8YnI+ICAgICAgICAgICAgbWFzc2FnZSA9ICfnlKjmiLflkI3miJblr4bnoIHplJnor68nPGJy PiAgICAgICAgcmV0dXJuIHJlbmRlcihyZXEsICJhcHAxL2xvZ2luLmh0bWwiLCB7J21hc3NhZ2Un OiBtYXNzYWdlfSk8L3ByZT48cD5gYGA8L3A+PHA+55So5LqO5Yik5pat55So5oi35piv5ZCm55m7 5b2V55qE6KOF6aWw5ZmoPC9wPjxwPmBgYHB5dGhvbjwvcD48cHJlPmRlZiBhdXRoKGZ1bmMpOjxi cj4gICAgZGVmIglubmVyKHJlcxvlc3QsICphcmdzLCAqKmt3YXJncyk6PGJyPiAgICAgICAgaXNf bG9naW4gPSByZXF1ZXN0LnNlc3Npb24uZ2V0KCdpc19sb2dpbicpPGJyPiAgICAgICAgaWYgaXNf bG9naW46PGJyPiAgICAgICAgICAgIHJldHVybiBmdW5jKHJlcxvlc3QsICphcmdzLCAqKmt3YXJn cyk8YnI+ICAgICAgICBlbHNlOjxicj4gICAgICAgICAgICByZXR1cm4gcmVkaXJlY3QoJy9sb2dp bicpPGJyPiAgICByZXR1cm4gaW5uZXI8L3ByZT48cD5gYGA8L3A+PHA+6Iez5LqO5YW25LuW55m7 6ZmG5ZCO6L+b6KGM5aSE55CG55qE5Ye95pWw77yM5Y+q6ZyA6KaB5Li65YW25re75YqgYXV0aOij hemlsOWZqOWNs+WPrzwvcD48cD7ov5nph4zlj5HnjrDvvIzlr7nkuo7orr7nva5zZXNzaW9u5ZKM 5ou/5Y+Wc2Vzc2lvbu+8jOWSjGNvb2tpZeeahOaTjeS9nOaWueW8j+exu+S8vO+8jOmCo+S5iOWu g+Wwhuiuvue9rueahOS/oeaBr+WtmOWCqOWIsOS6huWTquWRou+8n+etlOahiOaYr+WtmOWIsOS6 huaVsOaNruW6k+S4rTwvcD48cD7lnKjmlbDmja7lupPkuK3lj5HnjrDkuobkuIDlvKBkaWFuZ29f c2Vzc2lvbueahOihqO+8jOWtmOWCqOeahOS/oeaBr+S4ujwvcD48cD48aW1nIHNyYz0iaHR0cHM6 Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTQ2OTAxNS8yMDE4MTEvMTQ2OTAxNS0yMDE4MTEx NTE0MjYyMDIxMi0xNTI1NDEwODE2LnBuZyIgYWx0PSIiIGRhdGEtbWNlLXNyYz0iaHR0cHM6Ly9p bWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTQ2OTAxNS8yMDE4MTEvMTQ2OTAxNS0yMDE4MTExNTE0 MjYyMDIxMi0xNTI1NDEwODE2LnBuZyI+PC9wPjxwPui/memHjOeahOS/oeaBr+W6lOivpeaYr+eU qOafkOenjeWKoOWvhueul+azleWKoOWvhuS6hixleHBpcmVfZGF0YeS4unNlc3Npb27lrZjlnKjm iKrmraLml7bpl7Q8L3A+PHA+IyMjc2Vzc2lvbueahOWFtuS7luaWueazlTwvcD48cD4qJm5ic3A7 cmVxdWVzdC5zZXNzaW9uLnNldGRlZmF1bHQoJ2sxJywxMjMpICZuYnNwO+WtmOWcqOWImeS4jeiu vue9rjwvcD48cD4qJm5ic3A7ZGVsIHJlcxvlc3Quc2Vzc2lvblsnazEnXSZuYnNwOyDliKDpmaTm n5DmnaE8L3A+PHA+KiZuYnNwO3Jlcxvlc3Quc2Vzc2lvbi5jbGVhcigpJm5ic3A7Jm5ic3A7Jm5i c3A7IOWIoOmZpOaJgOaciTwvcD48cD4qJm5ic3A7cmVxdWVzdC5zZXNzaW9uLmtleXMoKSZuYnNw OyDojrflvpfmiYDmnInnmoRrZXnvvIzovpPlh7rkuLpkaWN0X2tleXMoWydpc19sb2dpbicsICd1 c2VybmFtZSddKe+8jOWPr2ZvcuW+queOr++8jOS4jeWPr+S7pemAmui/h+e0ouW8leWPluWAvDwv cD48cD4qJm5ic3A7cmVxdWVzdC5zZXNzaW9uLnZhbHVlcygpIOiOt+W+l+aJgOacieeahOWAvO+8 jOi+k+WHumRpY3RfdmFsdWVzKFtUcnVlLCAnc2ZlbmNzJ10p77yM5ZCM5LiKPC9wPjxwPiombmJz cDtyZXF1ZXN0LnNlc3Npb24uaXRlbXMoKSZuYnNwOyDojrflvpfmiYDmnInplK7lgLzvvIzovpPl h7pkaWN0X2l0ZW1zKFsoJ2lzX2xvZ2luJywgVHJ1ZSksICgndXNlcm5hbWUnLCAnc2ZlbmNzJyld Ke+8jOWQjOS4ijwvcD48cD4qJm5ic3A7cmVxdWVzdC5zZXNzaW9uLnNlc3Npb25fa2V5IOiOt+W+ l+eUqOaIt3Nlc3Npb27nmoTpmo/mnLrlrZfnrKbkuLI8L3A+PHA+KiZuYnNwO3Jlcxvlc3Quc2Vz c2lvbi5jbGVhcl9leHBpcmVkKCkmbmJzcDvlsIbmiYDmnIlTZXNzaW9u5aSx5pWI5pel5pyf5bCP 5LqO5b2T5YmN5pel5pyf55qE5pWw5o2u5Yig6ZmkPC9wPjxwPiombmJzcDtyZXF1ZXN0LnNlc3Np b24uZXhpc3RzKCJzZXNzaW9uX2tleSIpJm5ic3A75qOA5p+l55So5oi3c2Vzc2lvbueahOmaj+ac uuWtl+espuS4suWcqOaVsOaNruW6k+S4reaYr+WQpuWtmOWcqDwvcD48cD4qJm5ic3A7cmVxdWVz dC5zZXNzaW9uLnNldF9leHBpcnkodmFsdWUpJm5ic3A76Ieq5bex6K6+572u5LqG6L+H5pyf5pe2 6Ze077yM6buY6K6k5Li65Lik5ZGo44CCPC9wPjxwPuWmguaenHZhbHVl5piv5Liq5pW05pWw77yM c2Vzc2lvbuS8muWcqOS6m+enkuaVsOWQjuWkseaViOOAgjwvcD48cD7lpoLmnpx2YWx1ZeaYr+S4 qmRhdGF0aW1l5oiWdGltZWRlbHRh77yMc2Vzc2lvbuWwseS8muWcqOi/meS4quaXtumXtOWQjuWk seaViOOAgjwvcD48cD7lpoLmnpx2YWx1ZeaYrzAs55So5oi35YWz6Zet5rWP6KeI5Zmoc2Vzc2lv buWwseS8muWkseaViOOAgjwvcD48cD7lpoLmnpx2YWx1ZeaYr05vbmUsc2Vzc2lvbuS8muS+nei1 luWFqOWxgHNlc3Npb27lpLHmlYjnrZbnlaXjgII8L3A+PHA+PGJyIGRhdGEtbWNlLWJvZ3VzPSIx Ij48L3A+PHA+IyMjc2Vzc2lvbueahOmFjee9rjwvcD48cD5gYGBweXRob248L3A+PHA+U0VTU0lP Tl9DT09LSUVfTkFNRSDvvJ0gInNlc3Npb25pZCImbmJzcDsgJm5ic3A7IyDlrZjlnKjmtY/op4jl majnmoRjb29raWXplK7lkI08L3A+PHA+U0VTU0lPTl9DT09LSUVfUEFUSCDvvJ0gIi8iJm5ic3A7 ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsg I3Nlc3Npb27nmoRjb29raWXnmoTkvb/nlKjot6/lvoQ8L3A+PHA+U0VTU0lPTl9DT09LSUVfRE9N QUlOID0gTm9uZSZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsjIFNlc3Npb27nmoRj b29raWXkv53lrZjnmoTln5/lkI3vvIjpu5jorqTvvIk8YnI+U0VTU0lPTl9DT09LSUVfU0VDVVJF ID0gRmFsc2UmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IyDmmK/lkKZIdHRwc+S8 oOi+k2Nvb2tpZe+8iOm7mOiupO+8iTxicj5TRVNTSU9OX0NPT0tJRV9IVFRQT05MWSA9IFRydWUm bmJzcDsgJm5ic3A7ICZuYnNwOyAjIOaYr+WQplNlc3Npb27nmoRjb29raWXlj6rmlK/mjIFodHRw 5Lyg6L6T77yI6buY6K6k77yJPGJyPlNFU1NJT05fQ09PS0lFX0FHRSA9IDEyMDk2MdambmJzcDsg Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICMgU2Vzc2lvbueahGNvb2tpZeWkseaViOaXpeac n++8iDLlkajvvInvvIjpu5jorqTvvIk8YnI+U0VTU0lPTl9FWFBJUkVfQVRfQlJPV1NFUl9DTE9T RSA9IEZhbHNlJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IyDmmK/lkKblhbPpl63mtY/op4jl majkvb/lvpdTZXNzaW9u6L+H5pyf77yI6buY6K6k77yJPGJyPlNFU1NJT05fU0FWRV9FVkVSWV9S RVFVRVNUID0gRmFsc2UmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICMg5piv5ZCm 5q+P5qyh6K+35rGC6YO95L+d5a2YU2Vzc2lvbu+8jOm7mOiupOS/ruaUueS5i+WQjuaJjeS/neWt mO+8iOm7mOiupO+8iTwvcD48cD5gYGA8L3A+PHA+PGJyIGRhdGEtbWNlLWJvZ3VzPSIxIj48L3A+ PHA+PGJyIGRhdGEtbWNlLWJvZ3VzPSIxIj48L3A+PHA+PGJyIGRhdGEtbWNlLWJvZ3VzPSIxIj48 L3A+PHA+PGJyIGRhdGEtbWNlLWJvZ3VzPSIxIj48L3A+PHA+PGJyIGRhdGEtbWNlLWJvZ3VzPSIx Ij48L3A+PHA+Jm5ic3A7PC9wPg==">​

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐