Django——Django之状态保持(Cookie 和 Session)

Django 状态保持(Cookie 和 Session)

​ http 协议是无状态的,下一次访问同一个页面时并不知道上一次对这个页面做了什么,我们可以使用 Cookie 和 Session 来对页面的状态进行保持,这样可以省去用户在短时间内的重复操作,比如登录等

Cookie

​ Cookie 是由服务器生成,存储在浏览器的一小段文本信息, 当用户在设置了 Cookie 的环境中进行操作时,浏览器会在 request 对象中存储 Cookie 信息,并在用户一段时间之内再一次使用相同地址的网站时,这些 Cookie 信息便可以使用

特点

  • 以键值对方式进行存储
  • 通过浏览器访问一个网站时,会将浏览器存储的跟网站有关的所有 Cookie 信息发送给该网站的服务器 request.COOKIES
  • Cookie 时基于域名安全的
  • Cookie 是有过期时间的,如不指定,默认关闭浏览器之后 Cookie 就会过期

使用 Cookie

​ 设置 Cookie 需要一个HttpResponse对象或是它的子类对象,浏览器发送给服务器的 Cookies 保存在 request 对象的COOKIES中,视图中函数如下:

def set_cookie(request):
    response = HttpResponse('这是 cookie')
    # 设置过期时间
    response.set_cookie('num', 1, max_age=14 * 24 * 3600)
    return response

def get_cookie(request):
    # 从 Cookie 中取值
    num = request.COOKIES['num']
    return HttpResponse(num)

Session

​ Session 是存储在服务器端的另一种实现,默认存储在 django_session 表中,除了经过编码后的原数据,表中还会存储一个 session_id 字段,并且这个字段的值会以 Cookie 的形式返回给浏览器,浏览器便可以通过 session_id 来找到对应的 Session

特点

  • Session 是以键值对进行存储的
  • Session 依赖于 Cookie
  • Session 也是有过期时间的,默认为两周

Session 的相关方法

  • request.session['键'] = 值以键值对的格式写 Session
  • request.session.get('键', 默认值)根据键值对读取
  • request.session.clear()清除所有 Session,在存储中删除值的部分(键值对都删除)
  • request.session.flunsh()清除 Session 数据,在存储中删除 Session 的整条数据
  • request.session.set_expiry(value)设置 Session 过期时间

使用 Session

​ Session 是包含在 request 也是对象中的,视图中的函数如下:

def set_session(request):
    request.session['username'] = 'smart'
    request.session['age'] = 18
    return HttpResponse('这是 session')

def get_session(request):
    username = request.session['username']
    age = request.session['age']
    return HttpResponse(username + ':' + str(age))

Cookie 和 Session 的应用场景

​ Cookie 用来保存安全性要求不高的数据,例如用户名,Session 用来保存涉及到安全性要求较高的数据,银行卡账户、密码、登陆状态等

发布了72 篇原创文章 · 获赞 89 · 访问量 6546

猜你喜欢

转载自blog.csdn.net/scfor333/article/details/104292929