cookie/session

来源:互联网 发布:软件学院教务系统 编辑:程序博客网 时间:2024/06/07 05:28

产生背景:一次连接,从浏览器的一个request开始,到服务器返回response结束,多个页面需要传递参数,将要传递的数据存储到一个指定的位置,另外的页面去制定位置读取。

cookie是客户端,session是服务端,session依赖于cookie而存在,如果cookie被清除了,那么session也不会存在,cookie上传一个字符串,给session一个id,session请求时带着这个id来找cookie识别,cookie就见了这个id,就会对应的找出那个字符串,相当于一个令牌,如果cookie没了,session带着令牌不知道找谁,肯定是找不到的,岂不是很尴尬,就像超市门口的自动存货台。你自己相当于session,而管理员相当于cookie。

cookie本身由浏览器生成,通过Response将cookie写到浏览器上,下一次访问,浏览器根据不同的规则携带cookie过来

  1. 一种会话技术,延长请求的生命周期,让我下一次的请求和上一次的请求有一些数据共享
  2. cookie通常在响应中设置,在请求中会自动携带我们网站的所有cookie
  3. cookie 存储在浏览器中,使用文件进行存储,存储格式键值对
  4. cookie不能直接存中文,不能跨浏览器使用,也不能跨域名
    response.set_cookie(key,value,[max_age=None,exprise=None])
    request.GET.get(key,defaultvalue)

Session 服务端

  1. 一种会话技术
  2. Session是服务端技术,但是依赖于cookie
  3. Session存储到数据库中,数据库中使用Base64编码
  4. Session支持过期,默认过期时间两周
  5. Session支持中文

1,定义视图函数

def index(request):    # 得到返回的cookie值    username = request.COOKIES.get('username')    data = {'username':username}    return render(request,'app/index.html',context=data)def dologin(request):    # 获取用户名    dd = request.POST.get('user')    # 重定向    response = HttpResponseRedirect(reverse('rock:index'))    # 在返回中设置cookie    response.set_cookie('username',dd)    return response

(1)存储,set
在dologin得到数据,用cookie获取到需要得到的用户名,username是key,dd是value,session也一样,都是字典类型,都需要key,不可缺少。
dd = request.POST.get(‘user’)
response.set_cookie(‘username’,dd)
用重定向返回index页面,
response = HttpResponseRedirect(reverse(‘rock:index’))
(2)获取,get
在index页面获取到数据,并传递给页面渲染出来
username = request.COOKIES.get(‘username’)
data = {‘username’:username}

cookie设置有效时间,只要开着,永不过期,关闭浏览器之后按照我们设置的时间过期
response.set_cookie(‘username’,dd,max_age = 30)
实现功能是 一星期内免登陆, 根据复选框的值判断是否储存cookie,并设置过期时间
response.set_cookie(‘username’,dd,expires = timedelta(day=30))

2,在HTML页面设置

#index#数据渲染到页面<span>欢迎</span>{{ username }}<br><a href="{% url 'rock:login' %} ">登录</a><br><a href="">注销</a>

login
反向解析

{% csrf_token %}
用户名


session

跟cookie的方法一样,只是拿和取的方法跟cookie不一样

(1)存储
def dologinSession(request):
user = request.POST.get(‘user’)
# 字典结构,根据key拿value
request.session[‘username’] = user
# 重定向
return redirect(reverse(‘session:index.html’))

(2)获取
在index里面获取
username = request.session.get(‘username’)