通过redis的seesion对cookie信息加密  --- 防止cookie记录的用户信息泄露

import tornado.ioloop
import tornado.web from data.table_1 import User
from tornado.web import authenticated # 装饰器判断是否登录,否者就跳转到登陆页面。通过application配置跳转路径 from pycket.session import SessionMixin # 设置redis加密cookie的一个类,BaseHandler继承 import tornado.options
import tornado.httpserver
from tornado.options import define, options define('port',default=8000, help='run port', type=int)
define('version', default=0.1, help='version', type=str)   # 装饰器authenticated需要的Base类       通过redis加密需要继承这个SessionMixin
class BaseHandler(tornado.web.RequestHandler, SessionMixin):
def get_current_user(self):  # 改写Base类的这个方法
# current_user = self.get_secure_cookie('ID')
current_user = self.session.get('ID')
if current_user:
return current_user
return None    #  redis加密时,Login继承Base
class LoginHandler(BaseHandler):
def get(self):
nextname = self.get_argument('next','')
self.render('login_1.html',
nextname=nextname,
error=''
)
def post(self, *args, **kwargs):
name = self.get_argument('name','')
password = self.get_argument('password','')
username = User.by_name(name)
nextname = self.get_argument('next','')
print(name, password, nextname)
if username and username.password==password:
self.session.set('ID',name) # session为redis的会话,设置redis的加密cookie
if nextname:
self.redirect(nextname)
else:
self.redirect('/buy')
else:
self.render('login_1.html',
nextname=nextname,
error='用户名或密码错误'
) class BuyHandler(BaseHandler):
@authenticated
def get(self):
self.write('欢迎您,尊敬的 VIP1000 用户') application = tornado.web.Application(
[
(r"/login", LoginHandler),
(r"/buy", BuyHandler),
],
template_path='templates',
login_url='/login',
cookie_secret='haha',
pycket={
'engine': 'redis', # 连接redis
'storage': {
'host': 'localhost', # 本机
'port': 6379, # redis端口
'db_sessions': 5, # redis的数据库(0-15个)
'db_notifications': 11,
'max_connections': 2 ** 31,
},
'cookies': { # cookie 过期时间
'expires_days': 30,
'max_age': 100
},
},
debug=True
) if __name__ == '__main__':
tornado.options.parse_command_line() # 获取命令行的参数 --port=1040 就能使用这个参数
print(options.port)
print(options.version) http_server = tornado.httpserver.HTTPServer(application)
application.listen(options.port)
tornado.ioloop.IOLoop.instance().start()

防止cookie被盗用后,用这个虚假cookie去欺骗服务器(防止跨域攻击)

思路:在返回登录界面时发送一串独有的标记,这个标记和cookie相同,判断是否为服务器发出来登陆页面

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
{% if error %}
用户名或密码错误
{% end %} {% if nextname == '' %}
<form method="post" action="/login">
{% module xsrf_form_html() %} # 返回form表单给浏览器时发送独有的标记,和cookie的信息相同。
用来证明是服务器发送的
<p>用户名:<input type="text", name="name"></p>
<p>密码:<input type="password", name="password"></p>
<input type="submit">
</form>
{% else %}
<form method="post" action="/login?next={{nextname}}">
{% module xsrf_form_html() %}
<p>用户名:<input type="text", name="name"></p>
<p>密码:<input type="password", name="password"></p>
<input type="submit">
{% end %}
</form>
</body>
</html>

服务器对cookie信息加密的更多相关文章

  1. C#模拟httpwebrequest请求_向服务器模拟cookie发送

    使用C#代码模拟web请求,是一种常用的方法,以前没专门整理过,这里暂时贴上自己整理的完整代码,以后再做梳理: public class MyRequest { #region 辅助方法 public ...

  2. js_html_input中autocomplete="off"在chrom中失效的解决办法 使用JS模拟锚点跳转 js如何获取url参数 C#模拟httpwebrequest请求_向服务器模拟cookie发送 实习期学到的技术(一) LinqPad的变量比较功能 ASP.NET EF 使用LinqPad 快速学习Linq

    js_html_input中autocomplete="off"在chrom中失效的解决办法 分享网上的2种办法: 1-可以在不需要默认填写的input框中设置 autocompl ...

  3. 如何利用服务器下发的Cookie实现基于此Cookie的会话保持

    Cookie是一种在客户端保持HTTP状态信息的常用技术,基于Cookie的会话保持常常出现在很多AX的部署案例中,尤其是涉及电子交易的系统部署中.此类系统往往要求负载均衡设备按照服务器下发的Cook ...

  4. Cookie 路径在本机测试及服务器部署,在浏览器处理方式上的不同

    Table of Contents 1 问题场景 2 解决过程 2.1 cookie是否设置成功 2.2 cookie是否上传到服务器 3 总结 1 问题场景 最近在学用Python进行web开发,写 ...

  5. Node.js_express_浏览器存储技术 Cookie(服务器将少量数据交于浏览器存储管理)

    浏览器存储技术 Cookie 服务器将少量数据交于浏览器存储管理 解决 http 无状态协议的问题(无法区分多次请求是否发送自同一客户端) 一个网页一般最多 20个的 cookie,每个 cookie ...

  6. Cookie/Session机制详解

    会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话.常用的会话跟踪技术是Cookie与Session.Cookie通过在客户端记录信息确定用户身份,Session通过在服务器端 ...

  7. 【转】Cookie和Session区别和联系详解

    会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话.常用的会话跟踪技术是Cookie与Session.Cookie通过在客户端记录信息确定用户身份,Session通过在服务器端 ...

  8. 理解Cookie和Session机制(转)

    目录[-] Cookie机制 什么是Cookie 记录用户访问次数 Cookie的不可跨域名性 Unicode编码:保存中文 BASE64编码:保存二进制图片 设置Cookie的所有属性 Cookie ...

  9. Cookie与Session的区别-总结很好的文章

    Cookie与Session的区别-总结很好的文章 本文分别对Cookie与Session做一个介绍和总结,并分别对两个知识点进行对比分析,让大家对Cookie和Session有一个更深入的了解,并对 ...

随机推荐

  1. from表单的分向提交

    一:需求: 思路:document.form.action,表单分向提交,javascript提交表单同一个表单可以根据用户的选择,提交给不同的后台处理程序.即,表单的分向提交.如,在编写论坛程序时, ...

  2. adnanh webhook 框架使用

    adnanh webhook 支持以下功能: 接收请求 解析header 以及负载以及查询变量 规则检查 执行命令 简单测试 使用docker-compose docker-compose 文件 ve ...

  3. 理解JAVA虚拟机(下)

    2016-04-18 20:40:59 三.JVM内存参数调整及监控 3.1  JVM之内存调整 JVM运行时数据区的内存大小可以通过参数来设置,通常能设置的两块区域为堆空间和持久代(方法区),设置方 ...

  4. Linux高级文本处理命令

    cut 一.cut命令 功能:cut命令可以从一个文本文件/文本流中提取文本列 语法: cut -d '分割字符' -f fields ##用于有特定分割字符 cut -c 字符区间 ##用于排列整齐 ...

  5. curl 知识点

    curl :command line tool and library for transferring data with URLs curl 命令,常用缩写: curl 命令 缩写 说明 curl ...

  6. CentOS6.8 x64+Nginx1.3.8/Apache-httpd 2.4.3+PHP5.4.8(php-fpm)+MySQL5.5.28+CoreSeek4.1源码编译安装

    系统为CentOS6.8 x64服务器版精简安装. 准备工作 部署安装目录 /usr/local/* /var/lib/* /var/lib64/* 下载源文件 #cd /usr/local/src ...

  7. Python中的类(classes)

    Python的类机制使用尽可能少的新语法和语义将类引入语言.python的类提供了面向对象程序设计语言所有的 标准特性:类继承机制允许有多个基类,一个派生类可以覆盖基类中的任何方法,一个方法可以使用相 ...

  8. winform datagridview 不显示默认第一列 不显示未绑定列 数据源发生改变时自动更新 (转)

    不显示带星号的第一列: datagridview属性框中将 RowHeadersVisiber 设置为  false 不显示未绑定列: datagridview有一个属性是 AutoGenerateC ...

  9. 搭建openwrt_x86虚拟机环境

    1.下载源码 http://downloads.openwrt.org/snapshots/trunk/x86/openwrt-x86-generic-combined-ext4.img.gz 2.格 ...

  10. Windows Phone Runtime Component 中的类型转换

    Windows Phone Runtime Component 是Windows Phone 平台用来写C++类库的项目类型. 主要目的是让C#和C++进行互操作,引用历史的C++代码,保护知识产权, ...