通过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. mysql-python安装时mysql_config not found

    在安装 mysql-python时,会出现: sh: mysql_config: not found Traceback (most recent call last):   File "s ...

  2. poj-1015(状态转移的方向(01背包)和结果的输出)

    #include <iostream> #include <algorithm> #include <cstring> #include <vector> ...

  3. C#中DateTime的缺陷 ---- 代替品DateTimeOffset

    C#中的DateTime在逻辑上有个非常严重的缺陷: > var d = DateTime.Now; > var d2 = d.ToUniversalTime(); > d == d ...

  4. PHP中开启gzip压缩的2种方法

    网页开启gzip压缩以后,其体积可以减小20%~90%,可以节省下大量的带宽,从而减少页面响应时间,提高用户体验. php配置改法: 复制代码代码如下: zlib.output_compression ...

  5. react 知识点

    1.react内联样式写法: <div style={{width:'200px',height:'100px',border:'1px solid red'}}> </div> ...

  6. java学习之路之javaSE基础3

    所有代码都未经测试.. 1:for循环的格式? for循环格式: for(初始化表达式;条件表达式;循环后的操作表达式) { 循环体; } 执行流程: * a:执行初始化语句 * b:执行判断条件语句 ...

  7. 关于android webview 设置cookie的问题

    转自:http://blog.csdn.net/encienqi/article/details/7912733 我们在android中访问网络经常会用到Apache的HttpClient,用此类去访 ...

  8. bzoj4161: Shlw loves matrixI

    Description 给定数列 {hn}前k项,其后每一项满足 hn = a1*h(n-1) + a2*h(n-2) + ... + ak*h(n-k) 其中 a1,a2...ak 为给定数列.请计 ...

  9. (unittest之装饰器(@classmethod)) 让多个测试用例在一个浏览器里面跑 的方法

    一.装饰器 1.用setUp与setUpClass区别 setup():每个测试case运行前运行teardown():每个测试case运行完后执行setUpClass():必须使用@classmet ...

  10. python selenium 问题汇总

    FAQ 1.python+selenium+Safari浏览器,定位元素 selenium.common.exceptions.ElementNotVisibleException: Message: ...