cookie概念: 是由服务器生成,保存在浏览器端的一小段文本信息。cookie特点:1) cookie是以键值对进行存储的。2) 浏览器访问网站时,会将本地保存的跟网站相关的所有cookie发送给网站的服务器。3) cookie是基于域名安全的。 4) cookie是有过期时间的,默认关闭浏览器之后过期。 设置cookie: set_cookie(key, value, max_age='过期时间')。 读取cookie: request.COOKIES(保存浏览器发过来的cookie信息) 删除cookie. delete_cookie(key)
session概念: 保存在服务器端的文本信息,默认保存在服务器端的django_session表中。sesssion特点:1) session也是以键值对进行存储的。2) session依赖于cookie, session信息对应的唯一标识默认保存在sessionidcookie中。3) session是有过期时间的,默认两周之后过期。设置session: request.session['键']='值' 获取session: 变量 = request.session['键'] 删除session: request.session.flush() 设置session的过期时间: request.session.set_expire('秒数') 扩展: 1) django_session表中是由INSTALLED_APPS中的'django.contrib.sessions'应用生成的。 2) session的存储需要借助于MIDDLEWARE_CLASSES中的 'django.contrib.sessions.middleware.SessionMiddleware'中间件。 3) 可以通过SESSION_ENGINE配置session存储在什么地方。
csrf跨站请求伪造: 如果用户登录了网站,并且未退出, 点击了伪造链接,浏览器就会以登录用户的身份去访问A网站,可能会造成密码的的修改和财产的损失等,这就是csrf请求伪造(跨站请求伪造)。
Django框架针对post提交数据具有csrf的防护验证,如果需要使用Django的csrf防护,需要按以下步骤:1) 打开Django配置文件中的csrf防护中间件。 2)在使用表单post提交时,需要在表单中加上{ % csrf_token % }标签。
如果是ajax post请时,也需要在页面上加上{ % csrf_token % }标签。
防御原理:1) 访问页面时,django会把{ % csrf_token % }标签替换为一个名为csrfmiddlewaretoken的隐藏域。2)同时django网站会让浏览器保存一个名为csrftoken的cookie信息。3)在进行表单提交或者ajax post提交时,csrfmiddlewaretoken隐藏域的值和crsftoken cookie的值都会被提交给服务器,django框架中的csrf防护中间件会对这两个值进行对比,如果一致,则csrf验正通过,可以进行后续操作,否则出现403错误。 中间件流程
request对像产生: 请求到达Django框架内部时,Django框架会把请求报文中的请求信息封装在request对象的属性中===>依次从上到下调用MIDDLEWARE_CLASSES注册中间件类中的process_request函数===>根据请求的url地址进行匹配===>依次从上到下调用MIDDLEWARE_CLASSES注册中间件类中的process_view函数===>调用视图函数===>依次从下到上调用MIDDLEWARE_CLASSES注册中间件类中的process_view函数