zoukankan      html  css  js  c++  java
  • 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: 后台控制过期时间
    

     

  • 相关阅读:
    小伙创业做奶茶,兢兢业业把奶茶店已经扩张到了10家分店
    这个饭店每天只卖一道菜,月入百万?
    夫妻合力建大棚,种植辣椒和番茄,从此走上致富路
    下岗工人创业做办公设备,他将业务做的蒸蒸日上
    三十而立的他开始创业,打造旗舰网店,达到月销30万的传奇
    不断在创业路上寻找突破,他开店多家,没想到公司还上市了
    带着梦想和坚强,她收获了80后创业的广阔舞台,网站实现营利
    22岁开始创业,她把集团开到23家分店,营业额高达20亿元
    windows下git commit使用gvim编辑器
    windows下git commit使用gvim编辑器
  • 原文地址:https://www.cnblogs.com/jassin-du/p/8378220.html
Copyright © 2011-2022 走看看