Django-----cookie&session

Posted 磕伴

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Django-----cookie&session相关的知识,希望对你有一定的参考价值。

cookie

保存在用户浏览器端的一个键值对(别人给的凭证)

服务端可以向用户浏览器写cookie

客户端每次发请求会携带cookie去(放在请求头里面)

 

淘宝的cookie  京东的cookie(http的连接很简单,是无状态的,为了登录后下次来还认识,也为了避免再次登录)

功能:1.一段时间内免登录  2.浏览器自动记住账号密码  3.修改每次看的页数(只用修改一次)

禁用浏览器的cookie(无限投票例子)

 

 用户第一次请求时候后端处理代码

def login(request):
    if request.method=="GET":
        return render(request,\'登录界面\')
    else:
        user=request.POST.get(\'username\')
        pwd=request.POST.get(\'password\')
        print(user,pwd)
        if user==\'akagi\' and pwd== \'521\':
            obj=redirect(\'用户后台\')
            #obj.set_cookie(\'ticket\',\'sdfasdas\',max_age=10,path=\'/\')#max_age=10 十秒后cookie失效 里面的path属性指定这个cookie内容在哪个url生效         
            obj.set_signed_cookie(\'ticket\',\'19438\',salt=\'jjjjjj\',max_age=10)#cookie加密(签名)需要做异常处理   解密解密p57
            #set_cookie(self, key, value=\'\', max_age=None, expires=None, path=\'/\',
            #       domain=对域名划分sso, secure=https相关, httponly=安全相关js代码无法获取到, samesite=??):
            return obj
        else:
            return render(request, \'登录界面\')
View Code

后端会检查用户请求的时候是否带有相关的cookie,有则通过再做其他操作,无则返回登录界面

def classes(request):
    try:
    #tk=request.COOKIES.get(\'ticket\')  #自定义名字
        tk=request.get_signed_cookie(\'ticket\',salt=\'jjjjjj\')  #=加密时候salt要对应 签名
    except KeyError:
        return redirect(\'/login/\')
    #print(\'tk=\',tk)
    if not tk:
            return redirect(\'/login/\')
View Code

session(推荐)

保存在服务器端的数据(本质是键值对)

应用的时候依赖于cookie

作用:保持会话( Web网站)

好处:敏感信息不会直接给客户端(cookie容易被伪造,即使签了名也能被破解,因为数据在浏览器端)

原理:用户请求,返回一串随机字符串,然后服务端也保存这个随机字符串为key,一个字典为value(里面可以记录各种数据)

 

 用户第一次请求时候后端处理代码

def session_login(request):
    if request.method==\'GET\':
        return render(request,\'session.html\')
    else:
        u=request.POST.get(\'user\')
        p=request.POST.get(\'pwd\')
        obj=models.UserAdmin.objects.filter(username=u,password=p).first()
        if obj:
            #1.生成随机字符
            #2.通过cookie发给客户端
            #3.服务端保存(随机字符串1,{\'username\':\'qwe\',} ;下次验证两端各一份)   对应cookie里面的sessionid
            #(数据,类似键值对 放到数据库表里面了)
            request.session[\'username\']=obj.username #做三件事123  键值对
            request.session[\'password\'] = obj.password
            #随着增加的键值对越多,数据库session_key不变,session_data变长
            request.session[\'email\'] = \'love@qq.com\'
            request.session.set_expiry(5) #设置失效时间
            # * 如果value是个整数,session会在些秒数后失效(适用于整个Django框架,即这个数值时效时整个页面都会session失效)。
            #* 如果value是个datatime或timedelta,session就会在这个时间后失效。
            #* 如果value是0,用户关闭浏览器session就会失效。
            #* 如果value是None,session会依赖全局session失效策略。
            return redirect(\'/indexxx/\')
        else:
            return render(request,\'session.html\',{\'message\':\'请重新登录\'})
View Code

对session验证

def indexxx(request):
    #1.获取客户端cookie种的随机字符串
    #2.去session种查找有没有随机字符
    #3.去session中查看对应key的value中是否有值
    v=request.session.get(\'username\') #获取session里面key为username的value
    s=request.session.session_key
    b=request.session.values()
    print(s)
    if v:
         return  HttpResponse(\'ok,登录成功:%s---%s----%s\' %(v,s,b))
    else:
        return redirect(\'/session_login/\')
View Code

 

 

PS:

DJANGO 设置SESSION过期时间

cookie和session的详解与区别

 

以上是关于Django-----cookie&session的主要内容,如果未能解决你的问题,请参考以下文章

Django-----cookie&session

Django9 Cookie&Session

60 django- cookie和session 以及中间件

Django Cookie

Django:cookie

Django-7