服务器对cookie信息加密
通过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信息加密的更多相关文章
- C#模拟httpwebrequest请求_向服务器模拟cookie发送
使用C#代码模拟web请求,是一种常用的方法,以前没专门整理过,这里暂时贴上自己整理的完整代码,以后再做梳理: public class MyRequest { #region 辅助方法 public ...
- 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 ...
- 如何利用服务器下发的Cookie实现基于此Cookie的会话保持
Cookie是一种在客户端保持HTTP状态信息的常用技术,基于Cookie的会话保持常常出现在很多AX的部署案例中,尤其是涉及电子交易的系统部署中.此类系统往往要求负载均衡设备按照服务器下发的Cook ...
- Cookie 路径在本机测试及服务器部署,在浏览器处理方式上的不同
Table of Contents 1 问题场景 2 解决过程 2.1 cookie是否设置成功 2.2 cookie是否上传到服务器 3 总结 1 问题场景 最近在学用Python进行web开发,写 ...
- Node.js_express_浏览器存储技术 Cookie(服务器将少量数据交于浏览器存储管理)
浏览器存储技术 Cookie 服务器将少量数据交于浏览器存储管理 解决 http 无状态协议的问题(无法区分多次请求是否发送自同一客户端) 一个网页一般最多 20个的 cookie,每个 cookie ...
- Cookie/Session机制详解
会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话.常用的会话跟踪技术是Cookie与Session.Cookie通过在客户端记录信息确定用户身份,Session通过在服务器端 ...
- 【转】Cookie和Session区别和联系详解
会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话.常用的会话跟踪技术是Cookie与Session.Cookie通过在客户端记录信息确定用户身份,Session通过在服务器端 ...
- 理解Cookie和Session机制(转)
目录[-] Cookie机制 什么是Cookie 记录用户访问次数 Cookie的不可跨域名性 Unicode编码:保存中文 BASE64编码:保存二进制图片 设置Cookie的所有属性 Cookie ...
- Cookie与Session的区别-总结很好的文章
Cookie与Session的区别-总结很好的文章 本文分别对Cookie与Session做一个介绍和总结,并分别对两个知识点进行对比分析,让大家对Cookie和Session有一个更深入的了解,并对 ...
随机推荐
- for-auto使用
前言 c++11新增了一个工具,让编译器能够根据初始值的类型推断变量的类型: c++11还新增了一种循环,基于范围的for循环,可以对数组或者容器类的每一个元素执行相同的操作:同时,可以使用& ...
- poj-1112 (二分图染色+dp分组)
#include <iostream> #include <algorithm> #include <cstring> using namespace std; ; ...
- WinForm 实现点击一个按钮,执行另一个按钮事件
C# 代码如下: private void button1_Click(object sender, EventArgs e) { this.button1.Click += new System.E ...
- pycharm的安装和激活
这里可以自定意义安装路径 32-bit是创建32位桌面快捷方式(64-bit同理) .py勾选是默认关联py文件,勾选上后所有py文件默认用pycharm打开 Download....勾选是下载安装X ...
- test20181005 序列
题意 考场30分 维护差值,考虑每次移动的变更,当前2-n位置上的差加1,1位置上的差减n-1. 然后要求的是绝对值的和,用吉司机线段树维护最大最小值.次大次小值. 期望复杂度\(O(n \log n ...
- encode decode enumerate
format的用法 print(format('aa','>20')) print(format('aa','<20')) print(format('aa','^20')) 打印结果如下 ...
- lets encrypt 申请nginx 泛域名
1. 安装certbot工具 wget https://dl.eff.org/certbot-auto chmod a+x ./certbot-auto 2. 申请通配符域名 ./certbot-au ...
- 《Java程序猿面试笔试宝典》之Java变量命名有哪些规则
在Java语言中,变量名.函数名.数组名统称为标识符,Java语言规定标识符仅仅能由字母(a~z.A~Z).数字(0~9).下划线(_)和$组成,而且标识符的第一个字符必须是字母.下划线或$.此外.标 ...
- Kettle入门教程
最近做的项目用到了ETL工具Kettle,这个工具相当好用,可以将各种类型数据作为数据流,经过处理后再生成各种类型的数据.正如其名“水壶”,将各个地方的水倒进水壶里,再用水壶倒入不同的容器.不过一来初 ...
- Tcp 编程 的时代 已经到来
这是 一个 网友 在 Github 上的 项目 SmartRoute : https://github.com/IKende/SmartRoute ZooKeeper 和 Consul 的 “投票 ...