让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
 
时间: 2024-10-23 21:07:58

让python cookie支持特殊字符的相关文章

gettext模块实现Python国际化支持

1.gettext模块介绍 gettext模块为Python模块和应用程序提供国际化(i18n)和本地化(l10n)服务.它提供两套API,一套高层的类似于GNU gettext的API和一套基于类的API.前者适用于单语言的场景,并且语言的选择通常依赖于用户的locale,会全局性地影响到你整个应用程序语言的转译.后者允许你在一个python模块内进行本地化,非常适用于在应用程序运行时切换你的语言. 2.通用步骤 (1)无论是使用哪一套API,都必须提取可以翻译的字符串并且生成一个翻译模板文件

第五十六节,python实现支持并发、断点续传的Ftp程序

一.要求 1.用户md5认证 2.支持多用户同时登陆(并发) 3.进入用户的命令行模式,支持cd切换目录,ls查看目录子文件 4.执行命令(ipconfig) 5.传输文件: a.支持断点续传 b.传输中显示进度条 二.思路 1.客户端用户登录和注册: a.客户端仅提供用户名和密码,选择登录或注册,b.服务器端进行注册并将加密后的密码写入文件,最后返回给客户端是否登录或注册成功 2.ls和cd命令 a.客户端输入命令,服务器端处理并返回给客户端 3.执行命令: a.客户端发送需要执行的命令b.服

Supporting Python 3(支持python3)——使用你自己的固定器扩展2to3

使用你自己的固定器扩展2to3 2to3是围绕一个叫着lib2to3标准库包的封装.它包含一个代码分析器.一个用于设置修改分析树的固定器和一个巨大的固定器集合.包含在lib2to3里的固定器能做大多数可能自动完全的转换.然而在有些情况下你需要写自己的固定器.我首先想要向你保证这些情况是非常罕见的并且你不可能永远需要这一章,你跳过这一章也不会有什么不好的感觉. When fixers are necessary It is strongly recommended that you don't c

Supporting Python 3(支持python3)——关于本书

关于本书 这本书书是源码在GitHub[5]上的开放性的书,所以任何人都可以给本书提供贡献(在湖闻樟译注: 原文提供pdf版,购买价格可以自定,有条件的话建议扶持下).作者和编辑是Lennart Regebro,以及以后贡献者将列在这里. 这本书是在reStructuredText[1],里写的,使用Sphinx[2]和LaTeX[3] 排版 以及使用CreateSpace[4].印刷.各部分的字体:TeX Gyre Schola主体文本, DejaVu Sans Mono 代码 以及Flux

[IT学习]Python如何处理异常特殊字符

A byte of Python<输入与输出>一节中有一个处理回文的小例子(io_input.py).作者留了个思考题. 如何将标点去掉.忽略大小写后,再考虑是否回文? 可以学习re模块.学习str的方法来处理. 方法1:使用re正则表达式将特殊字符处理为空字符串. import re def reverse(text): return text[::-1] def is_palindrome(text): return text == reverse(text) something = in

Supporting Python 3(支持python3)——使用现代的风格改善你的代码

使用现代的风格来改善你的代码 一旦你已经添加了Python 3的支持,你将改成使用Python的新的函数来改进的代码.Once you have added Python 3 support you have a chance to use the newer features of Python to improve your code. Many of the things mentioned in this chapter are in fact possible to do even b

Supporting Python 3(支持python3)——为Python 3做准备

为Python3作准备 在开始添加Python 3的支持前,为了能够尽可能地顺利过度到Python 3,你应该通过修改对2to3来说很难苦的东西来给你的代码做一些准备.即使你现在不打算迁移到Python 3,有一些事你也可以现在就做,这些事在一些情况下它们甚至会加快你的代码在Python 2下的运行. 你可能想要读在I用现代的用句来改善你的代码 上包含许多其他一些你能够用到你的代码中的改进的章节. 在Python 2.7下运行 这个过程的第一步是让你的代码在Python 2.6或者2.7下运行.

Python实现支持并发、断点续传的FTP

参考网上一个FTP程序,重写了一遍,并稍加扩展 一.要求 1. 支持多用户同时登录 2. 可以注册用户,密码使用md5加密 3. 可以登录已注册用户 4.  支持cd切换目录,ls查看目录子文件 5. 支持上传.下载文件 6. 可以执行命令,如:ipconfig 二.代码 配置文件 1 #!/usr/bin/env python 2 # -*- coding:utf-8 -*- 3 4 import os 5 6 BASE_DIR = os.path.dirname(os.path.dirnam

旧文备份:Python国际化支持

Python通过gettext模块支持国际化(i18n),可以实现程序的多语言界面的支持,下面是我的多语言支持实现: 在python安装目录下的./Tools/i18n/(windows下例 D:\Program Files\Python25\Tools\i18n)目录中找到pygettext.py运行之,生成翻译文件模版messages.pot,内容大概是这个样子: # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR ORGANIZATION # FI