- 一、状态保持
- 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
django cookie 和 session
最新推荐文章于 2024-04-21 15:37:50 发布