服务器对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有一个更深入的了解,并对 ...
随机推荐
- how to check CAN frame
1. check buffer size getsockopt(s, SOL_SOCKET, SO_SNDBUF,&snd_size, &optlen); setsockopt(s, ...
- hdu2067 小兔的棋盘 DP/数学/卡特兰数
棋盘的一角走到另一角并且不越过对角线,卡特兰数,数据量小,可以当做dp求路径数 #include<stdio.h> ][]; int main() { ; ) { int i,j; lon ...
- spring boot 热部署devtools实现
1.devtools spring为开发者提供了一个名为spring-boot-devtools的模块来使Spring Boot应用支持热部署,提高开发者的开发效率,无需手动重启Spring Boot ...
- MyBatis 与 Spring Data JPA 选择谁?
MyBatis 与 Spring Data JPA 选择谁? https://www.v2ex.com/t/285081 jpa predicate优缺点 https://blog.csdn.net/ ...
- 总结:基于Oracle Logminer数据同步
第 1 页 共 20 页 出自石山园主,博客地址:http://www.cnblogs.com/shishanyuan LogMiner 配置使用手册 1 Logminer 简介 1.1 LogMin ...
- Linux下C/C++代码调用PHP代码(转)
Linux下C/C++代码可以通过popen系统函数调用PHP代码并通过fgets函数获取PHP代码echo输出的字符串. //main.c char str[1024] = {0}; char * ...
- sqlserver 同义名的使用
USE [ccflow5]GOdrop synonym ccusergo/****** Object: Synonym [dbo].[ccuser] Script Date: 11/12/20 ...
- Servlet和JSP比较
1. 两者哟许多相似之处,都可以生成动态网页 2. JSP的优点是擅长于网页制作,生成动态页面,比较直观. JSP的缺点是不容易跟踪与拍错 3. Servlet是纯Java语言,擅长流程处理和业务逻辑 ...
- react组件的创建
最近项目接触react和rn,之前会一些vue和小程序,起初写react是很难受的,尤其是jsx的写法,不过2周过后感觉写起来有点舒服了... 目前react的组件一共有3种方式:React.crea ...
- PREV-1_蓝桥杯_核桃的数量
问题描述 小张是软件项目经理,他带领3个开发组.工期紧,今天都在加班呢.为鼓舞士气,小张打算给每个组发一袋核桃(据传言能补脑).他的要求是: 1. 各组的核桃数量必须相同 2. 各组内必须能平分核桃( ...