• Django cookie与session


    cookie与session关系

    cookie      是保存在客户端浏览器的键值对,浏览器发送请求时候会自动携带。
    
    session    1、生成随机字符串
               2、回给浏览器,让它写到cookie  # {"sessionID":"234asd243dv35fd"}
               3、自己保留一份,作为一个key,存到一个地方,key后面对应一个保存用户相关信息的键值
                              session-key           session-data
                              234asd243dv35fd       {"user":"alex"

     概念

    cookie不属于http协议范围,由于http协议无法保持状态,但实际情况,我们却又需要“保持状态”,因此cookie因此诞生

    cookie工作原理

    用户在浏览器登录后,服务端根据用户的登录信息生成键值对(也就是cookie),保存用户的个人信息,然后将键值对返回给浏览器,浏览器保存在本地。当浏览器再次访问时,就会自动将这个键值对(cookie)带上,这样服务端就能通过cookie的内容判断这个用户是谁了。

    cookie虽然在一定程度上解决了保持状态的需求,但由于cookie本身最大支持4096字节的数据,以及cookie本身是明文保存在客户端,很容易被拦截或窃取。因此就需要一种能够支持保存更多数据,并且保存在服务端,且具有较高安全性的机制,这就是session

    session工作原理

    session是基于cookie工作的

    1. 用户登录后,服务端随机生成一个字符串,将这个随机字符串作为键值对(cookie)的value,而键值对的key则是由Django的session配置中自定义,默认情况下是sessionid,组成的cookie就{'sessionid':'xxxxxxxxxx'},服务端将这个cookie返回给浏览器,这样,浏览器本地只保存着一个随机字符串;
    2. 服务端再将第1步中生成的随机字符串做为key,由用户信息产生的字典做为value,组成一个键值对,保存在服务器端;假设随机字符串是"abc123",那组成的键值对理论上类似这样:{'abc123'{'login':true,'username':'jassin'}}
    3. 下次用户访问时,浏览器带着cookie,服务端根据cookie中的随机字符串就可以找到对应的用户信息了。

    session的好处浏览器端只存在一个随机字符串,避免用户信息被直接暴露在外。

    from django.shortcuts import render
    from app01 import models
    def login(request):
        # 记录日志
        if request.method == 'GET':
            pass
        else:
            user = request.POST.get('user')
            pwd = request.POST.get('pwd')
            obj = models.UserInfo.objects.filter(user=user,pwd=pwd).first()
            if obj:
                # 用户名和密码正确
                """
                    {
                        “xxxx的随机字符串”:{'id':1,'name':'jassin'},
                        “xx的随机字符串”:{'id':11},
                    }
    
                    表:
                    session_key           value
                    xxxx的随机字符串   asfasdfasdfasdfwer2342fszdfsdfs
    
                1. 生成随机字符串
                2. 把随机字符串写到客户端浏览器cookie中
                3. 在内存中大字典写入:
                    {
                        随机字符串: {'id':用户id}
                    }
                """
                request.session['id'] = obj.id
                request.session['name'] = obj.name
    
            else:
                # 用户名和密码错误
                pass
    def home(request):
        """
        :param request:
        :return:
        """
        """
        1. 获取客户端cookie中的随机字符串
        2. 如果有:
                则获取 key 对应的值
                否则 返回None
    
        """
        user_id = request.session.get('id')
    
    
    def temp(request):
        data_list = {
            'k1':'sf4sdf'
        }
        return render(request,'temp.html',data_list)

     Django实现的cookie

    获取Cookie

    request.COOKIES['key']
    request.get_signed_cookie(key, default=RAISE_ERROR, salt='', max_age=None)
        参数:
            default: 默认值
               salt: 加密盐
            max_age: 后台控制过期时间
    

     

  • 相关阅读:
    Unity The Method Signature Matching Rule
    Unity The Property Matching Rule
    Unity The Type Matching Rule
    Unity The Custom Attribute Matching Rule
    Unity The Member Name Matching Rule
    Unity No Policies
    Unity The Return Type Matching Rule
    Unity The Parameter Type Matching Rule
    Unity The Namespace Matching Rule
    关于TSQL递归查询的(转)
  • 原文地址:https://www.cnblogs.com/jassin-du/p/8378220.html
Copyright © 2020-2023  润新知