Django基础(三)session会话、认证系统、内容分页、中间件
一、Cookies & Session
Cookies:
由于http协议是无状态的在一次请求和下一次请求之间没有任何状态保持我们无法根据请求的任何方面来识别来自同一人的连续请求。然而浏览器的开发者在很早的时候就已经意识到 HTTP 的无状态会对Web开发者带来很大的问题于是(cookies)应运而生。 cookies 是浏览器为 Web 服务器存储的一小段信息。 每次浏览器从某个服务器请求页面时它向服务器回送之前收到的cookies。
开发者可以通过在用户浏览器中设置一个cookies用来保存某一个唯一标识符在用户下次请求时通过读取之前存入的标识信息来识别是否为同一个用户。 因此还可以在cookies中存入一些其他标识用于定制用户的个性化需求。如:“背景颜色、字体大小、显示格式等等 ...”
Cookies的不足之处:
由于http协议是明文的在传输过程中非常容易被嗅探***抓取到因此在Cookies里面要绝对避免存储敏感信息意味着不应该使用cookie存储任何敏感信息。
同时也要避免在cookies中存储可能会被篡改的敏感数据。 在cookies中存储 IsLoggedIn=1 以标识用户已经登录。 犯这类错误的站点数量多的令人难以置信 绕过这些网站的安全系统也是易如反掌。
Session:
session是存储在服务器端的一段数据与cookies配合工作有了session可以弥补cookies的不足每个session都由一个随机的32字节哈希串来标识并存储于cookie中。
看图理解:
它们的工作流程:
新用户
1、浏览器向服务器发起请求
2、服务器响应返回一个登陆页面让用户登录
3、在用户登录成功后服务器将随机生成一个session-id将其做为一个key,其值为用户的登陆数据保存在服务器的某个位置再将session-id保存到用户浏览器的cookies中。
老用户
1、浏览器向服务器发起请求
2、检查浏览器缓存中是否存有该网站域名对应的cookies并且没有过期
如果有域名对应的cookies则带上cookies向服务器发起请求
如果没有则直接向服务器发起请求
3、服务器端检查浏览器传过来的cookies中的session-id和服务器保存的session是否有对应的匹配并且没有过期。
如果有匹配并且没有过期则被认为该会话有效是已经登陆过的合法用户程序直接跳过用户登录页面返回已登陆的后台展示页面。
如果没有匹配或者已经过期则被认为该会话无效是没有登陆的未授权用户程序返回登陆页面让用户重新登陆授权。在用户再次登陆成功后服务器会重新建立会话更新seesion
二、Cookies & Session 实战应用
写入Cookies
def logintest(request): if request.method == 'POST': username = request.POST.get('username') password = request.POST.get('passwd') print(username) print(password) if username == 'tuchao' and password == '123456': response = HttpResponse("Welcome You Login Success") # 写入cookies 设置key为logindvalue为True response.set_cookie("logind",True) return response f = open("templates/logintest.html",'r') html = f.read() return HttpResponse(html)
还可以给 response.set_cookie() 传递一些可选的参数来控制cookie的行为
[code=bash;toolbar:false">max_age # cookie需要延续的时间以秒为单位如果参数是'None'这个cookie会延续到浏览器关闭为止。 expires # cookie失效的实际日期/时间。它的格式必须是DD-Mth-YY HH:MM:SS GMT 如果给出了这个参数它会覆盖 max_age 参数。 path # cookie生效的路径前缀。 浏览器只会把cookie回传给带有该路径的页面这样你可以避免将cookies传给站点中其他的顶层页面。 # 例如: response.set_cookie("logind",True,path='/home')- Django基础(三)session会话、认证系统、内容分页、中间件
- Django源码分析5:session会话中间件分析
- Django 认证系统 cookie & session & auth模块
- Django进阶(路由系统、中间件、缓存、Cookie和Session、Ajax发送数据
- Django(5) session登录注销、csrf及中间件自定义、django Form表单验证(非常好用)
- 将Python的Django框架与认证系统整合的方法
- 信息安全系统设计基础第四周学习内容
- Django1.5内置的用户认证系统介绍(之一)--by hillfree
- Django1.5内置的用户认证系统介绍(之四)Authentication in Web requests --by hillfree
- 全国计算机技术与软件专业技术资格(水平)考试【软件评测师】-考试内容总结(四)中间件基础知识
- Django权限系统auth模块详解 转自:原文出处 auth模块是Django提供的标准权限管理系统,可以提供用户身份认证, 用户组和权限管理。 auth可以和admin模块配合使用, 快速建
- Django-分页和中间件
- 在前后端分离的项目中,后台使用shiro框架时,怎样使用它的会话管理系统(session),从而实现权限控制
- django 认证系统--3
- Django用户认证系统(二)Web请求中的认证
- Django之博客系统:在网站中分享内容(一)
- 分布式系统消息中间件——RabbitMQ的使用基础篇
- django:ddtcms关于内容管理系统的想法
- Django1.5内置的用户认证系统介绍(之五)在admin后台管理用户 --by hillfree
- django 用户认证系统