zoukankan      html  css  js  c++  java
  • Python的Django框架中的Cookie相关处理

    Python的Django框架中的Cookie相关处理


    浏览器的开发人员在非常早的时候就已经意识到。 HTTP's 的无状态会对Web开发人员带来非常大的问题,于是(cookies)应运而生。 cookies 是浏览器为 Web server存储的一小段信息。 每次浏览器从某个server请求页面时,它向server回送之前收到的cookies

    来看看它是怎么工作的。

    当你打开浏览器并訪问 google.com 。你的浏览器会给Google发送一个HTTP请求,起始部分就象这样:

    GET / HTTP/1.1
    Host: google.com
    ...


    当 Google响应时。HTTP的响应是这种:

    HTTP/1.1 200 OK
    Content-Type: text/html
    Set-Cookie: PREF=ID=5b14f22bdaf1e81c:TM=1167000671:LM=1167000671;
          expires=Sun, 17-Jan-2038 19:14:07 GMT;
          path=/; domain=.google.com
    Server: GWS/2.1
    ...


    注意 Set-Cookie 的头部。 你的浏览器会存储cookie值( PREF=ID=5b14f22bdaf1e81c:TM=1167000671:LM=1167000671 ) ,并且每次訪问google 网站都会回送这个cookie值。

    因此当你下次訪问Google时。你的浏览器会发送像这种请求:

    GET / HTTP/1.1
    Host: google.com
    Cookie: PREF=ID=5b14f22bdaf1e81c:TM=1167000671:LM=1167000671
    ...


    于是 Cookies 的值会告诉Google,你就是早些时候訪问过Google站点的人。 这个值可能是数据库中存储用户信息的key。能够用它在页面上显示你的username。 Google会(以及眼下)使用它在网页上显示你账号的username。

    存取Cookies

    在Django中处理持久化,大部分时候你会更愿意用高层些的session 和/或 后面要讨论的user 框架。 但在此之前,我们须要停下来在底层看看怎样读写cookies。 这会帮助你理解本章节后面要讨论的工具是怎样工作的,并且假设你须要自己操作cookies,这也会有所帮助。

    读取已经设置好的cookies极其简单。 每个`` HttpRequest`` 对象都有一个`` COOKIES`` 对象。该对象的行为类似一个字典,你能够使用它读取不论什么浏览器发送给视图(view)的cookies。

    def show_color(request):
      if "favorite_color" in request.COOKIES:
        return HttpResponse("Your favorite color is %s" %       request.COOKIES["favorite_color"])
      else:
        return HttpResponse("You don't have a favorite color.")


    写cookies略微复杂点。 你须要使用 HttpResponse对象的 set_cookie()方法。

    这儿有个基于 GET 參数来设置 favorite_color

    cookie的样例:

    --edit http://www.aichengxu.com/view/61768 --
    def set_color(request):
      if "favorite_color" in request.GET:
    
        # Create an HttpResponse object...
        response = HttpResponse("Your favorite color is now %s" %       request.GET["favorite_color"])
    
        # ... and set a cookie on the response
        response.set_cookie("favorite_color",
                  request.GET["favorite_color"])
    
        return response
    
      else:
        return HttpResponse("You didn't give a favorite color.")


    你能够给 response.set_cookie() 传递一些可选的參数来控制cookie的行为,參考: http://www.aichengxu.com/view/61768 

    好坏參半的Cookies


    或许你已经注意到了。cookies的工作方式可能导致的问题。 让我们看一下当中一些比較重要的问题:

    cookie的存储是自愿的,一个client不一定要去接受或存储cookie。 其实,全部的浏览器都让用户自己控制 是否接受cookies。 假设你想知道cookies对于Web应用有多重要,你能够试着打开这个浏览器的 选项:

    虽然cookies广为使用,但仍被觉得是不可靠的的。 这意味着。开发人员使用cookies之前必须 检查用户能否够接收cookie。

    Cookie(特别是那些没通过HTTPS传输的)是很不安全的。 由于HTTP数据是以明文发送的。所以 特别easy受到嗅探攻击。 也就是说,嗅探攻击者能够在网络中拦截并读取cookies。因此你要 绝对避免在cookies中存储敏感信息。

    这就意味着您不应该使用cookie来在存储不论什么敏感信息。

    另一种被称为”中间人”的攻击更阴险,攻击者拦截一个cookie并将其用于另一个用户。

    第19章将深入讨论这样的攻击的本质以及怎样避免。



    即使从预想中的接收者返回的cookie也是不安全的。 在大多数浏览器中您能够很easy地改动cookies中的信息。有经验的用户甚至能够通过像mechanize(http://wwwsearch.sourceforge.net/mechanize/) 这种工具手工构造一个HTTP请求。

    因此不能在cookies中存储可能会被篡改的敏感数据。 在cookies中存储 IsLoggedIn=1 ,以标识用户已经登录。 犯这类错误的站点数量多的令人难以置信。 绕过这些站点的安全系统也是易如反掌。 


  • 相关阅读:
    阻止元素默认行为
    微信小程序--页面的生命周期和参数传递
    微信小程序-查询快递
    小程序-冒泡事件
    SpringMVC-使用、运行流程、配置文件寻找
    OpenCV-安装使用、图像处理
    Spring-AOP:JoinPoint、各种通知、基于XML和注解的AOP、声明式事务
    Spring-AOP:开发准备、初识动态代理、使用步骤、
    Spring-IOC:Bean的作用域、生命周期、XML的装配、注解注入、@Autowired
    Spring-IOC:复杂值注入、各种类型赋值、bean的复用
  • 原文地址:https://www.cnblogs.com/yxysuanfa/p/6813904.html
Copyright © 2011-2022 走看看