django cookie 和 session

  • 一、状态保持
    • 1.http协议是无状态的:每次请求都是一次新的请求,不是记得之前的通话状态
    • 2.客户端与服务器的一次通信,就是一次会话
    • 3.实现状态保持的方式:在客户端或服务器端存储与会话有关的数据
    • 4.存储方式包括cookie、session,会话一般指session对象
    • 5.使用cookie,所有数据存储在客户端,注意不要存储敏感信息
    • 5.推荐使用sesison方式,所有数据存储在服务器端,在客户端cookie中存储session_id
    • 6.状态保持的目的是在一段时间内跟踪请求者的状态,可以实现跨页面访问当前请求者的数据
    • 7.注意:不同的请求者之间不会共享这个数据,与请求者一一对应
  • 二、cookie
    • 1.设置cookie通过HttpResponse对象来设置,也可以设置值过期时间,
    • 2.设置cookie     HttpResponse.set_cookie(键,值,过期时间)
    • 3.过期时间max_age 和expires  二选1
      • max_age=整数    单位秒设置过期秒数
    • 4.删除cookie    HttpResponse.delete_cookie(键)  键不存在不报错
    • 5.视图函数中获取cookie   request.COOKIE.get(键,默认值)
    • 6.Httpresponse 对象在视图函数中 有
      • render(request,'html文件')  和   redrict(reverse('index'))   等
    • 7.前端Html文件中 通过模板语言可以拿到 cookie 的值
      • {{ request.COOKIES.key }}
  • 三、session
    • 启用session
    • 使用django-admin startproject创建的项目默认启用
      • 在settings.py文件中
      • 项INSTALLED_APPS列表中添加:
      • 'django.contrib.sessions',
      • 项MIDDLEWARE_CLASSES列表中添加:
      • 'django.contrib.sessions.middleware.SessionMiddleware',
      • 禁用session :删除上面指定的两个值,禁用会话将节省一些性能消耗
    • 1.设置session通过request.session来设置,可以设置过期时间
    • 2.设置session  request.session[‘uname’] = ‘张三’
    • 3.session过期时间 request.session.set_expiry(10)
      • set_expiry(value):设置会话的超时时间
      • 如果没有指定,则两个星期后过期
      • 如果value是一个整数,会话将在values秒没有活动后过期
      • 若果value是一个timedelta对象,会话将在当前时间加上这个指定的日期/时间过期
      • 设置timedelta对象 需要在settings 中  SESSION_SERIALIZER='django.contrib.sessions.serializers.PickleSerializer'
      • 如果value为0,那么用户会话的Cookie将在用户的浏览器关闭时过期
      • 如果value为None,那么会话永不过期
    • 4.获取session    request.session.get(键,默认值)
    • 5.request对象在视图函数中
      • html文件可以通过 request.session.uname  拿到session的值
    • 6.删除session    
      • del request.session[键]   相当于 request.session[键]=None   删除会话,不删除数据库记录
      • request.session.flush()   删除所有会话 ,并删除数据库记录
      • request.session.clear()   删除所有会话 ,不删除数据库记录
      • 会话指得是存储的session键值对,在数据库djabgo_session 表中的session_date 字段中
      • 数据库记录指得是客户端(浏览器)cookie中session_id 值,和数据库djabgo_session 表中的session_key 字段值
  • 四、session和cookie的区别
    • 1,session 在服务器端,cookie 在客户端(浏览器)
    • 2,session 默认被存在在服务器的一个文件里(不是内存)
    • 3,session 的运行依赖 session id,而 session id 是存在 cookie 中的,也就是说,如果浏览器禁用了 cookie ,同时 session 也会失效(但是可以通过其它方式实现,比如在 url 中传递 session_id)
    • 4,session 可以放在 文件、数据库、或内存中都可以。
    • 5,用户验证这种场合一般会用 session
    • 因此,维持一个会话的核心就是客户端的唯一标识,即 session id

猜你喜欢

转载自blog.csdn.net/qq_41654985/article/details/80690280