资讯专栏INFORMATION COLUMN

Python:Tornado 第二章:实战演练:开发Tornado网站:第七节:安全Cookie机制

dmlllll / 3329人阅读

摘要:上一篇文章第二章实战演练开发网站第六节异步与协程化下一篇文章第二章实战演练开发网站第八节用户身份认证是很多网站为了辨别用户的身份而存储在用户本地终端的数据,在中使用可以方便地对进行读写。

上一篇文章:Python:Tornado 第二章:实战演练:开发Tornado网站:第六节:异步与协程化
下一篇文章:Python:Tornado 第二章:实战演练:开发Tornado网站:第八节:用户身份认证

Cookie是很多网站为了辨别用户的身份而存储在用户本地终端(Client Side)d的数据,在Tornado中使用RequestHandler.get_cookie()、RequestHandler.set_cookie()可以方便地对Cookie进行读写。

实例:Cookie的简单读写
import tornado.web

session_id = 1
class MainHandler(tornado.web.RequestHandler):
    def get(self):
        global session_id
        if not self.get_cookie("session"):
            self.set_cookie("session",str(session_id))
            session_id+=1
            self.write("设置新的session")
        else:
            self.write("已经具有session")

if __name__ == "__main__":
    app=tornado.web.Application([
        ("/",MainHandler)
    ])
    app.listen("8888")
    tornado.ioloop.IOLoop.current().start()

本例中用get_cookie()函数判断Cookie名【session】是否存在,如果不存在则为其赋予新的session_id.

在实际应用中,Cookie经常像本例这样用于保存session信息。
因为Cookie总是被保存在客户端,所以如何保存其不被篡改是服务器端程序必须解决的问题。
Tornado为Cookie提供了信息加密机制,使得客户端无法随意解析和修改Cookie的键值。
实例:安全的Cookie

代码:

import tornado.web

session_id = 1
class MainHandler(tornado.web.RequestHandler):
    def get(self):
        global session_id
        #get_secure_cookie代替get_cookie
        if not self.get_secure_cookie("session"):
            #set_secure_cookie代替set_cookie
            self.set_secure_cookie("session",str(session_id))
            session_id+=1
            self.write("设置新的session")
        else:
            self.write("已经具有session")

if __name__ == "__main__":
    app=tornado.web.Application([
        ("/",MainHandler)
    ],cookie_secret="JIA_MI_MI_YAO")
    app.listen("8888")
    tornado.ioloop.IOLoop.current().start()

对比上面的简单Cookie实例可以发现不同之处:

在tornado.web.Application对象初始化时赋予cookie_secret参数,该参数值时一个字符串,用于保存本网站Cookie加密时的密钥。

在需要读取cookie的地方使用RequestHandler.get_secure_cookie代替原来的RequestHandler.get_cookie调用。

在需要写入Cookie的地方用RequestHandler.set_secure_cookie替换原来的RequestHandler.set_cookie调用,

这样,就不需要担心Cookie伪造的问题了,但是cookie_secret参数值作为加密密钥,需要好好保护,不能泄露。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/42617.html

相关文章

  • PythonTornado 二章实战演练开发Tornado网站:第六节:异步与协程化

    摘要:上一篇文章第二章实战演练开发网站第五节输出相应函数下一篇文章第二章实战演练开发网站第七节安全机制有两种方式可改变同步的处理流程异步化针对的处理函数使用修饰器,将默认的同步机制改为异步机制。使用异步对象处理耗时操作,比如本例的。 上一篇文章:Python:Tornado 第二章:实战演练:开发Tornado网站:第五节:RequestHandler:输出相应函数下一篇文章:Python:...

    cod7ce 评论0 收藏0
  • PythonTornado 二章实战演练开发Tornado网站:第八节:用户身份认证

    摘要:上一篇文章第二章实战演练开发网站第七节安全机制下一篇文章第二章实战演练开发网站第九节防止跨站攻击在的类中有一个属性用于保存当前请求的用户名。实例使用属性及方法来实现用户身份控制。该地址被用于装饰器在发现用户尚未验证时重定向到一个。 上一篇文章:Python:Tornado 第二章:实战演练:开发Tornado网站:第七节:安全Cookie机制下一篇文章:Python:Tornado 第...

    Kahn 评论0 收藏0
  • PythonTornado 二章实战演练开发Tornado网站:第九节:防止跨站攻击

    摘要:上一篇文章第二章实战演练开发网站第八节用户身份认证下一篇文章第三章概念及应用第一节概念跨站请求伪造,或是一种对网站的恶意利用。其中是存在漏洞的网站,而是存在攻击行为的恶意网站。 上一篇文章:Python:Tornado 第二章:实战演练:开发Tornado网站:第八节:用户身份认证下一篇文章:Python:Tornado 第三章:HTML5 WebSocket概念及应用:第一节:Web...

    Zoom 评论0 收藏0
  • PythonTornado 二章实战演练开发Tornado网站:第五节:RequestHan

    摘要:上一篇文章第二章实战演练开发网站第四节输入捕捉下一篇文章第二章实战演练开发网站第六节异步与协程化输出响应函数是指一组为客户端生成处理结果的工具函数,开发者调用它们以控制的处理结果。清空所有在本次请求中之前写入的和内容。 上一篇文章:Python:Tornado 第二章:实战演练:开发Tornado网站:第四节:RequestHandler:输入捕捉下一篇文章:Python:Tornad...

    nanfeiyan 评论0 收藏0
  • PythonTornado 二章实战演练开发Tornado网站:第四节:RequestHan

    摘要:上一篇文章第二章实战演练开发网站第三节接入点函数下一篇文章第二章实战演练开发网站第五节输出相应函数输入捕捉是指在中用于获取客户端输入的工具函数和属性。是获取单个值而在参数存在多个值得情况下使用,返回多个值的列表。 上一篇文章:Python:Tornado 第二章:实战演练:开发Tornado网站:第三节:RequestHandler:接入点函数下一篇文章:Python:Tornado ...

    blankyao 评论0 收藏0

发表评论

0条评论

dmlllll

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<