当前位置: 首页 > article >正文

cookie和session的简单介绍(lnh25)

介绍一些背景信息
"""
    1. 网站它是不用保存用户的信息,最早期的时候,网站都是一些静态网站
        eg:新闻网站  博客
    2. 随着技术发展,诞生了很多需要登录的网站
        eg: 淘宝  京东  支付宝...
        登录:解决了在网站中,网站可以识别出你是谁
        
      以登录为例,当用户第一次登录网站的时候,用户输入用户名和密码,如果不保存下来,拿用户就每次都需要登录,意味着每次都要输入用户名和密码、
      
      针对以上的问题,如何解决的嫩?
      利用到了cookie,当用户第一次登录成功网站的时候,服务端告诉浏览器把用户名和密码都给用户的浏览器,然后,用户浏览器把用户名和密码保存在本地,之后,用户在每次访问网站的时候,会自动把之前保存的用户名和密码都传给服务端,服务端接收浏览器传过来的用户名和密码在进行验证.
      
      针对以上方案有没有问题? 肯定是有的,把用户名和密码保存在浏览器本地最大的问题就是不安全!!!
      
      如何优化一下上述不安全问题?
      session的诞生, session是把数据保存在服务端的,但是,session会生成一个随机字符串,在服务端做随机字符串和用户信息的对应关系
      就是把用户信息保存在数据表中了,它是如何保存的?
        随机字符串1:用户信息1
        随机字符串2:用户信息2
        随机字符串3:用户信息3
      
      session做的事情:
          1. 生成一个随机字符串
          2. 把随机字符串和用户信息的对应关系保存在数据表中
          3. 把随机字符串返回给浏览器,让浏览器把随机字符串保存下来
      之后,用户在访问网站的时候,会把随机字符串一块提交过来,服务端拿着随机字符串去数据表中查询,如果查到了,说明登录了,如果查不到,就说明还没有登录
          
          select * from t where key = ''
      
      背景信息:cookie在浏览器上是可以选择不保存的
      面试题1:session是基于cookie工作的?对,为什么?
      面试题2:如果浏览器把保存cookie的开关关掉了,说白了就是不能保存用户信息了,问:session一定不能用了?对于不对?不对,
      
      
      session把数据保存在数据表里了,但是,当数据量特备大的时候,查询效率肯定会降低
      
      
      token:就是一个算法
"""

1. cookie
    # 就是把数据保存在浏览器上的数据都可以称之为cookie
    cookie一般保存的形式是:k:v键值对
2. session
    # session把数据保存在服务端

关于cookie和session的面试题:
    1. cookie把数据保存在浏览器
    2. session把数据保存在服务端
    3. session保存的数据更加安全
3. token
4. jwt------------>三段式信息-------------》加密得到的

Cookie的操作

# 使用Django操作cookie
return HttpResponse
return redirect
return render


obj = HttpResponse
return obj

obj = redirect
return obj

obj = render
return obj

# 如果你想操作cookie,必须使用obj对象

1. 设置cookie
obj.set_cookie('key', 'value')
2. 获取cookie
print(request.COOKIES.get("key"))

3. 还可以给cookie设置一个过期时间
    max_age:
    expires:是IE浏览器
    # 都是用来设置过期时间的
4. path
5. 前端也可以获取cookie和session
localstorage
sessionstorage
6. 删除Cookie(退出功能,注销功能)
    res.delete_cookie
# 写一个登录的案例
 

操作 

# 都是用来保存用户信息的
为什么要用它来保存用户信息的?因为HTTP协议的无状态,意思是不能保存用户信息的
但是呢,我们网站又需要保存用户信息,所以,诞生了一些保存用户新的技术,cookie,session,token ,jwt

# cookie
1. cookie是保存在浏览器上了,但是用户可以自行关闭cookie 的保存
2. 如何进行保存cookie
    # 保存cookie 必须使用HttpResponse对象
    obj = HttpResponse()
    obj.set_cookie('key1', 'value1') # 有什么变化?在浏览器上面就会有一个键值对
    obj.set_cookie('key2', 'value2') # 有什么变化?在浏览器上面就会有一个键值对
    obj.set_cookie('key3', 'value3') # 有什么变化?在浏览器上面就会有一个键值对
    return obj
    # 服务端让客户端浏览器保存的,用户有权可以关闭cookie,提醒大家不要关闭cookie
3. 取值
    request.COOKIES.get('key1') # value
    request.COOKIES.get('key2') # value
    request.COOKIES.get('key3') # value
4. cookie的一些其他参数
    obj.set_cookie('key', 'value')
    max_age:设置过期时间
    path:生效的路径
    domain:生效的域名
    secure:False,通过https协议传递cookie
    httponly:false,就不能通过js抓取到cookie
5. 删除cookie(注销功能)
    obj.delete_cookie('key1')
    obj.delete_cookie('key2')
    obj.delete_cookie('key3')
    

 

Django操作session

# cookie是保存在浏览器上面,它的数据不安全
# 怎么做个优化?把用户的信息保存在服务端,session做的
# session它还是基于cookie工作的,它的原理是:
1. 先做用户信息的认证
2. 生成一个随机字符串
3. 用这个随机字符和用户信息做个映射,保存起来,django默认是保存在MySQL中
	key			data
    随机字符串   用户信息
4. 服务端会把随机字符串返回给浏览器,浏览器把随机字符串保存起来,下次访问的时候,一块带着随机字符串传给服务端,服务端拿着这个随机字符串去数据表中查询,如果查到了,说明已经登录过了,
'''要求每个同学必须能口述出来'''

# 如果你在Django中默认使用session,前提是必须有django_session表
在cookie中,session保存的key默认是:sessionid
# sesssion的默认过期时间是:14天
def set_session(request):
    request.session['username'] = 'kevin'
    # 这个数据保存在了哪里?
    """
        设置session发生的事情:
            1. 生成了一个随机字符串
            2. 把数据给你保存到了django_session表中
                2.1 这个操作是在中间件中操作的
                2.2 请求来的时候,是把数据准备好,在缓存中(内存)
                2.3 响应走的时候,才真正的执行了create,insert方法
            3. 把随机字符串返回给浏览器
    """
    return HttpResponse('set_Session')


def get_session(request):
    print(request.session.get('username'))
    print(request.session['username'])
    """
        获取session发生的事情:
            1. 获取cookie值,名为sessionid的cookie值
            2. 拿着这个cookie值去数据库中查询
            3. 如果查询到了,把查询到的数据封装到request.session中
    """
    return HttpResponse('get_Session')

# 删除session
def del_Session(request):
    # 删除session
    request.session.delete() # (只删数据库)
    request.session.flush() # 数据库和cookie都删
    return HttpResponse('del_session')

# cookie和session的又一个区别:
1. cookie设置数据是有大小限制的
2. session没有数据限制大小的


http://www.kler.cn/a/18218.html

相关文章:

  • Golang进阶
  • Python爬虫如何处理验证码与登录
  • IDEA启动提示Downloading pre-built shared indexes
  • c++设计模式demo
  • Linux awk命令详解-参数-选项-内置变量-内置函数-脚本(多图、多示例)
  • 练习LabVIEW第四十四题
  • OJ练习第93题——数青蛙
  • Docker启动多个mysql容器
  • (六)【平衡小车制作】位置式PID、直立环与速度环编程
  • CompletableFutrue异步处理
  • React 第三方插件 —— Cron 表达式生成器(qnn-react-cron)
  • Java 多线程知识
  • K8S:K8S自动化运维容器化(Docker)集群程序
  • 《python爬虫练习》之随机的User-Agent请求头
  • SOFA Weekly|开源之夏 MOSN 与 Layotto 项目简介、社区会议预告、社区本周贡献
  • java计算矩形的面积和周长的方法
  • OpenFeign详解
  • 前端基于uniapp[uniPush]实现APP消息推送(安卓、IOS)
  • 为什么选择云计算
  • 什么是镜像?阿里云服务器镜像是什么?镜像怎么选?
  • 时序预测 | Matlab实现SSA-GRU、GRU麻雀算法优化门控循环单元时间序列预测(含优化前后对比)
  • 全网最火,Web自动化测试驱动模型详全,一语点通超实用...
  • k8s基础4——deployment控制器、应用部署、升级、回滚、水平扩容缩容
  • LeetCode 1206. 实现跳表
  • OJ练习第94题——编辑距离
  • 强烈推荐:一款中文AI问答、创作、绘画工具