zoukankan      html  css  js  c++  java
  • Django之cookie

    1.cookie是个啥?

      cookie是本地浏览器上保存的一个文件,使用键值对的形式保存数据(字典,key和value)

      账户验证成功之后,服务器端向客户端发送一段字符串,当用户再次登录的时候,服务器端不会再一次验证账户密码是否正确,而是会查看是否有这一段字符串,如果有的话,服务器端会直接跳转到登陆成功的页面

    2.简单的cookie验证实例:

      views.py:

    user_info={
        'user1':{'pwd':'123'},
        'user2':{'pwd':'321'},
    }                  #为了方便,直接将数据库的内容写入字典里
    
    def login(request):
        if request.method=='GET':
            return render(request,'login.html')
        if request.method=='POST':
            u=request.POST.get('username')
            p=request.POST.get('pwd')
            dic=user_info.get(u)         #字典的get方法,查找key值,存在返回value,否则返回none
            if dic and dic['pwd']==p:      #验证正确后,给客户端发送cookie
                res=redirect('/index/')
                res.set_cookie('uname',u)
                return res
            else:
                return render(request,'login.html',{'error_msg':"invalid"})
    
    
    def index(request):
        user=request.COOKIES.get('uname')   #当你再次登录的时候,后端会获取你的cookie(uname),如果有的话,
        if not user :                说明是登录过的,可以直接登录,否则密码验证登录
            return redirect('/login/')
        else:
            return render(request,'index.html',{'username': user})

      login.html:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Login</title>
    </head>
    <body>
        <div>
            <form action="/login/" method="POST">
                <input name="username" type="text" placeholder="用户名"/>
                <input name="pwd" type="password" placeholder="密码"/>
                <input type="submit" value="登录"/>
            </form>
            {{ error_msg }}
        </div>
    </body>
    </html>
    View Code

      index.html:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>index</title>
    </head>
    <body>
        {{ username }}
    </body>
    </html>
    View Code

    url里记得添加路由,不在赘述。

      这样就成功的在本地浏览器存入了cookie,可以通过chrome查看到:

    3.cookie的设置:

      上面代码中的  res.set_cookie('uname',u)  是啥意思?这是cookie的操作之一,接下来简单的介绍一下cookie的设置。

      

       #后面不加任何参数,关闭浏览器后失效
       res.set_cookie('uname',u)
       #超时时间,超过之后失效
       res.set_cookie('uname','value',max_age=5) #截止时间失效 res.set_cookie('uname','value',expires=5) #在网站的所有url里都可以获取到cookie, 如果path='/index/',则只有index这个网页可以获取 res.set_cookie('uname', 'value', path='/') #生效的域名 res.set_cookie('uname', 'value', domain=None) # httponly=False只能http协议传输,无法被JavaScript获取(不是绝对,底层抓包可以获取到也可以被覆盖) res.set_cookie('uname', 'value', httponly=False)

      获取cookie:

    1     #用户发送数据是的全部cookie(字典形式)
    2     request.COOKIES
    3     #获取方式
    4     request.COOKIES['uname'] 
    5     request.COOKIES.get('uname')

      cookie加密生成和获取

        #salt是加密盐,需要相同
        res.set_signed_cookie('uname','user1',salt="qwer") 
        request.get_signed_cookie('uname',salt='qwer')
  • 相关阅读:
    Visual C# 3.0 新特性概览
    一个C#睡前故事[翻译]
    ASP.NET User Control使用技巧一则
    Visual Studio 2005 调试器的新增功能
    .NET Framework 3.0新特性
    客户端提高WEB页面显示速度的方法
    VS.Net 2005中如何:使用“编辑并继续”
    如何在 VS 2005 里调试 Javascript
    关于DotNES
    Sql语句优化汇总(CSDN上的帖子)
  • 原文地址:https://www.cnblogs.com/SunsetSunrise/p/7684170.html
Copyright © 2011-2022 走看看