cookie与session简介
回忆Http协议四大特性
- Cookie
- 保存在客户端上跟用户信息(状态)相关的数据
- Session
- 保存在服务端上跟用户信息(状态)相关的数据
session的工作需要依赖于cookie 就算是目前所有能够识别用户身份的网址也都需要使用cookie(客户端浏览器也有权拒绝保存cookie)
django操作cookie
- 想要让客户端浏览器保存cookie需要HttpResonse对象调用方法
return HttpResponse() return render() return redirect() return JsonRepsonse() - 设置cookie
obj = HttpResponse()/render()/redirect()/JsonRepsonse() obj.操作cookie的方法 return obj - cookie操作设置
1.登录设置cookie 2.多个视图函数都需要校验用户是否登录 装饰器 3.如何记住用户登录之前想要访问的页面 用户登录成功之后自动跳转 场景1:用户访问了其他需要登录才可以访问的页面 如何跳转>>>:想要访问的 场景2:用户直接访问的登录页面 如何跳转>>>:网址首页 print(request.path) print(request.path_info) print(request.get_full_path())
django操作session
- 类似于服务端接收到客户端产生的随机字符串,存储后每次自动校验
- 1.django默认的session失效时间14天
- 2.客户端会接收到键值对,键默认是sessionid值是加密的随机字符串(令牌)
- 3.session用于存储一次会话的多次请求的数据,存在服务器端
- 4.session可以存储任意类型,任意大小的数据
- 5.浏览器关闭后,再次打开session也能相同
- 6.session是以键值对的形式存储的
- 7.session依赖于cookie;唯一标识码保存在sessionid cookie
- session操作
request.session['name'] = 'jason' 1.django自动产生一个随机字符串返回给客户端(对name加密) 2.往django_session创建数据(对jason加密) request.session.get('name') 1.自动从请求中回去sessionid对应的随机字符串 2.拿着随机字符串去django_session中匹配数据 3.如果匹配上还会自动解密数据并展示 - session的存储位置(五种模式)
数据库 缓存数据库 文件 缓存+数据库 加密 - session其他操作
* 删除 # 删除当前会话的所有Session数据 request.session.delete() # 删除当前的会话数据并删除会话的Cookie。 request.session.flush() * 时间设置 # 设置会话Session和Cookie的超时时间 request.session.set_expiry(value) 1.如果value是一个int类型,那么session将在value这个时间后过期,其中value代表的是秒。 2.如果value是一个datetime或者timedelta对象,那么这个session将在指定的时间后过期。datetime必须是使用了PickleSerializer进行序列化的。 3.如果value等于0,那么session将在web浏览器关闭后就直接过期。 4.如果value等于None,那么session将用settings.py中设置的全局过期字段SESSION_COOKIE_AGE,这个字段默认是14天,也就是2个礼拜。 5.读session的时候不会修改session的有效期,修改session的时候会重新设置session的有效期,会从修改的时间,重新计时。 6.如果settings.py中设置了SESSION_EXPIRE_AT_BROWSER_CLOSE=True,那么默认讲不再使用SESSION_COOKIE_AGE了,而是浏览器一关闭,session数据就会过期。这个值默认是为False。value的注意事项: 1. 如果value是个整数,session会在些秒数后失效。 2. 如果value是个datatime或timedelta,session就会在这个时间后失效。 3. 如果value是0,用户关闭浏览器session就会失效。 4. 如果value是None,session会依赖全局session失效策略
django中间件
-
- 所有的请求和响应都必须经过中间件
-
- django中间件默认自带七个,每个中间件负责不同的功能
-
- Django 中间件作用
- 修改请求,即传送到view中的HttpRequest对象。
- 修改响应,即view返回的HttpResponse对象。
中间件的配置: MIDDLEWARE = [ 'django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', - 常见的中间件方法(五个)
- 1.process_request
1.请求来的时候会按照配置文件中注册了的中间件 从上往下依次执行每一个中间件里面的process_request方法 如果没有则直接跳过 2.该方法如果返回了HttpResonse对象 那么请求不会再往后执行 原路返回 - 2.process_response
1.响应走的时候会按照配置文件中注册了的中间件 从下往上一次执行每一个中间件里面的process_response方法 没有没有则直接跳过 2.该方法有两个形参request和response 并且默认情况下应该返回response 3.该方法也可以自己返回HttpResponse对象 相当于狸猫换太子 注意:如果请求的过程中process_request方法直接反悔了HttpResponse对象那么会原地执行同级别process_response方法返回(flask则不同) - 3.process_view
当路由匹配成功之后 执行视图函数之前 自动触发 - 4.process_excption
当视图函数报错之后 自动触发 - 5.process_template_response
当视图函数返回的数据对象中含有render属性对应render函数才会触发
- 1.process_request
- 自定义中间件
1. 创建一个任意名的文件夹 2. 文件夹内创建一个任意名的py文件 3. 在py文件内编写中间件类 4. 在配置文件中注册即可