您的位置:首页 > 编程语言 > Go语言

Django基础(三)session会话、认证系统、内容分页、中间件

2016-06-09 20:43 816 查看

一、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')


[p]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐