cookie和session

Cookie操作

  obj = HttpResponse()
  # 操作cookie
  return obj
  # 如果想要操作cookie,你就不得不用obj对象
  # 设置cookie
  obj.set_cookie(key,value)
  # 获取cookie
  request.COOKIES.get(key)
  # 在设置cookie可以添加一个超时时间,针对ie浏览器需要使用expires
  obj.set_cookie(key,value,max_age=3,expires=5)
  # 如何主动删除cookie(注销)
  obj = redirect('/login/')
  obj.delete_cookie('username')
  return obj
  """
  浏览器不单单会存
  而且后面每次访问你的时候还会带着过来
  """
  # 校验用户是否登录的装饰器
  def login_auth(func):
      def inner(request,*args,**kwargs):
          request.path_info
          request.get_full_path  # 能够拿到用户想要访问的url
          target_url = request.get_full_path
          if request.COOKIES.get('username')
          	      return func(request,*args,**kwargs)
          else:
              return redirect('/login/?next=%s'%target_url)
          return res
      return inner
  # 用户如果在没有登录的情况下想访问一个需要登录的页面,
  # 先跳转到登录页面,当用户输入正确的用户名和密码之后
  # 应该跳转到之前想要访问的页面

Session操作

  """
  数据是保存在服务端的(存在哪呢??),给客户端返回的是随机字符串
sessionid: 随机字符串

  1.在默认情况下,操作session的时候需要django默认的一张django_session表
数据库迁移命令,django会自己创建很多表,而django_session就是其中的一张

  2.django默认session的过期时间是14天,但是也可以认为的修改它
  """
  # 设置session
  request.session['key'] = value
  # 获取
  request.session.get('key')
  # 设置过期时间
  request.session.set_expiry()
  """
  括号内可以放四种类型的参数
1.整数  多少秒
2.日期对象  到指定日期就失效
3.0     一旦当前浏览器窗口关闭立刻失效
4.不写   失效时间就取决于django内部全局session默认的失效时间
  """
  # 清除session
  request.session.delete() # 只删服务端的,客户端的不删
  request.session.flush() # 浏览器和服务端都清空
  request.session是一个对象
  django session表中的数据条数是取决于浏览器的,同一个计算机上同一个浏览器只会有一条数据生效
  (当session过期的时候可能会出现多条数据对应一个浏览器,不会持续很久,内部会自动清楚)
  主要是为了节省服务端数据库资源
posted @ 2021-01-10 15:52  浮生一夜不知秋  阅读(75)  评论(0)    收藏  举报