zoukankan      html  css  js  c++  java
  • 让python cookie支持特殊字符

    让python cookie支持特殊字符

    先对cookie做下简单的介绍

    cookie的作用:

    tcp协议能够通过三次握手建立连接。client发送的多次请求能够通过句柄维护同一个连接。可是http协议是一种无状态的协议。对于浏览器发送的多次请求,server是无法区分是不是同一个浏览器发送的。这样就须要使用额外的数据维护会话。

    服务端收到浏览器的请求,在响应的时候能够种cookie,这样client与服务端能够将cookie来回传递,从而维护一个session状态

    cookie有2个必备的属性,那就是name。value,另外还有几个可选的属性,分别控制cookie的生存周期(expires),可见性及安全性(secure)。

    废话半天,进入正题:

    依照cookie的标准,一些特殊字符是不同意写入cookie的,可是有时候我们的开发者非常可爱,比方说,前段时间我就遇到一个,前端为了现有username信息。将邮箱直接写入cookie,后台在取其它cookie的时候。就会抛出异常。

    为此查看了python的源代码,重写了Cookie.Morsel模块。

    以下是代码实现,在使用的时候由import cookie.py 代替import Cookie,以下是cookie.py代码:

    #!/usr/bin/python
    #-*- coding: utf-8-*-
    #TODO:该模块重构Cookie.Morsel使得get_cookie支持@,:等特殊字符
     
    import Cookie
    import string
     
    _Morsel =Cookie.Morsel
     
    legal_char =string.ascii_letters + string.digits +"!#$%&'*+-.^_`|~"+"@"
     
    class MorselHook(_Morsel):
        def set(self, key, val, coded_val,LegalChars=Cookie._LegalChars+legal_char, idmap=string._idmap,translate=string.translate):
            return super(MorselHook, self).set(key,val, coded_val, LegalChars, idmap, translate)
     
    Cookie.Morsel =MorselHook
     


  • 相关阅读:
    VirtualBox Network设置的NAT和Bridged Adapter模式区别
    Kubernetes里的ConfigMap的用途
    使用Kubernetes里的job计算圆周率后2000位
    给谷歌输入法增添自定义词组,提高输入效率
    推荐一个yaml文件转json文件的在线工具
    GCC同时使用静态库和动态库链接
    Linux后台开发常用工具
    gcc链接参数--whole-archive的作用
    rdynamic和-whole-archive
    gcc和ld 中的参数 --whole-archive 和 --no-whole-archive
  • 原文地址:https://www.cnblogs.com/yutingliuyl/p/7284616.html
Copyright © 2011-2022 走看看