zoukankan      html  css  js  c++  java
  • cookie与session

    什么是cookie

    cookie是保存在浏览器上的键值对

    为什么会有cookie和session?

    因为http协议是无状态的,没有办法记住用户是谁,是谁登录了,试想一下,当你在淘宝上看了一下午,加入了很多东西在购物车,第二天起来登录一看,发现全没了,因为浏览器根本不知道你是谁,所以就有了cookie。

    是服务端设置在客户端浏览器上的键值对,也就意味着浏览器其实可以拒绝服务端的"命令"的,默认情况下 浏览器都是直接让服务端设置键值对。

    那我们知道了cookie的概念之后,需要对之前学习的三板斧做出一点改变:

    #变形:
    obj1 = HttpResponse()
    return obj1
    obj2 = render()
    return obj2
    obj3 = redirect()
    return obj3
                
    设置cookie
    obj1.set_cookie()
    获取
    request.COOKIES.get()
    删除
    obj1.delete_cookie()
    

    什么是session

    session是保存在服务器上的键值对, 在django中session默认过期的时间是14天。

    request.session['key'] = value #仅仅只会在内存产生一个缓存
    

    django内部自动生成随机的字符串,然后生成的session会存入django_session表,记得要先用 makemigration 和 migrate 命令生成表。存入了数据库之后,会把产生的随机字符串发送给浏览器,也就是 session_id ,这个是唯一的,每个用户都不一样。

    如何获取session:

    ​ request.session.get('key')

    1、浏览器发送cookie到django后端之后,django会自动获取到cookie值

    2、拿着随机字符串去django_session表中对比 是否有相对应的数据

    3、如果比对上了,就会把随机字符串所对应的数据取出赋值给request.session,如果对不上,那request.session就时none

    注意:django session表是针对浏览器的,不同的浏览器发送请求才会有不同的记录。

    如何删除session

    request.session.delete()  # 只删除服务端的session
                    
    request.session.flush()  # 浏览器和服务端全部删除
    

    session也可以设置超时时间:

    request.session.set_expiry(value多种配置)
    #value是整数:session会在value秒后失效
    #如果是datatime或者timedelta,session就会在这个时间之后失效
    #如果是0:用户关闭浏览器session就会失效
    #如果是none,session会以来全局session失效策略。
    

    总结

    用户用一个浏览器来登录,服务器获取到了他的用户信息之后,会生成一个唯一的随机的字符串返还给浏览器,然后浏览器的cookie就会把这个字符串保存下来,服务器会把用户的信息做加密处理,和这个生成的字符串按照对应存入数据库,下次用户再访问的时候,就可以通过查看cookie和数据库里的字符串是否对应,是的话就不用登陆了。要是用户注销了,服务器就会删除这条session,下次用户就需要在登陆了,下次再登录的时候获得的字符串就不一样了。

  • 相关阅读:
    结构型模式代理&适配器
    创建型模式单例&工厂&建造者&原型
    结构型模式装饰者&桥接&门面
    python中列表(list)的使用
    Win2003 域控制器设置和客户端安装
    Python下冒泡排序的实现
    乔布斯在斯坦福大学毕业典礼上的演讲
    字符串替换
    统计文件中某一字符串出现的次数
    [用户 'sa' 登录失败。原因: 该帐户被禁用]的解决方案
  • 原文地址:https://www.cnblogs.com/chanyuli/p/11768704.html
Copyright © 2011-2022 走看看