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

  1. import tornado.ioloop
  2. import tornado.web
  3.  
  4. from data.table_1 import User
  5. from tornado.web import authenticated # 装饰器判断是否登录,否者就跳转到登陆页面。通过application配置跳转路径
  6.  
  7. from pycket.session import SessionMixin # 设置redis加密cookie的一个类,BaseHandler继承
  8.  
  9. import tornado.options
  10. import tornado.httpserver
  11. from tornado.options import define, options
  12.  
  13. define('port',default=8000, help='run port', type=int)
  14. define('version', default=0.1, help='version', type=str)
  15.  
  16.   # 装饰器authenticated需要的Base类       通过redis加密需要继承这个SessionMixin
  17. class BaseHandler(tornado.web.RequestHandler, SessionMixin):
  18. def get_current_user(self):  # 改写Base类的这个方法
  19. # current_user = self.get_secure_cookie('ID')
  20. current_user = self.session.get('ID')
  21. if current_user:
  22. return current_user
  23. return None
  24.  
  25.    #  redis加密时,Login继承Base
  26. class LoginHandler(BaseHandler):
  27. def get(self):
  28. nextname = self.get_argument('next','')
  29. self.render('login_1.html',
  30. nextname=nextname,
  31. error=''
  32. )
  33. def post(self, *args, **kwargs):
  34. name = self.get_argument('name','')
  35. password = self.get_argument('password','')
  36. username = User.by_name(name)
  37. nextname = self.get_argument('next','')
  38. print(name, password, nextname)
  39. if username and username.password==password:
  40. self.session.set('ID',name) # session为redis的会话,设置redis的加密cookie
  41. if nextname:
  42. self.redirect(nextname)
  43. else:
  44. self.redirect('/buy')
  45. else:
  46. self.render('login_1.html',
  47. nextname=nextname,
  48. error='用户名或密码错误'
  49. )
  50.  
  51. class BuyHandler(BaseHandler):
  52. @authenticated
  53. def get(self):
  54. self.write('欢迎您,尊敬的 VIP1000 用户')
  55.  
  56. application = tornado.web.Application(
  57. [
  58. (r"/login", LoginHandler),
  59. (r"/buy", BuyHandler),
  60. ],
  61. template_path='templates',
  62. login_url='/login',
  63. cookie_secret='haha',
  64. pycket={
  65. 'engine': 'redis', # 连接redis
  66. 'storage': {
  67. 'host': 'localhost', # 本机
  68. 'port': 6379, # redis端口
  69. 'db_sessions': 5, # redis的数据库(0-15个)
  70. 'db_notifications': 11,
  71. 'max_connections': 2 ** 31,
  72. },
  73. 'cookies': { # cookie 过期时间
  74. 'expires_days': 30,
  75. 'max_age': 100
  76. },
  77. },
  78. debug=True
  79. )
  80.  
  81. if __name__ == '__main__':
  82. tornado.options.parse_command_line() # 获取命令行的参数 --port=1040 就能使用这个参数
  83. print(options.port)
  84. print(options.version)
  85.  
  86. http_server = tornado.httpserver.HTTPServer(application)
  87. application.listen(options.port)
  88. tornado.ioloop.IOLoop.instance().start()

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

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

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>Title</title>
  6. </head>
  7. <body>
  8. {% if error %}
  9. 用户名或密码错误
  10. {% end %}
  11.  
  12. {% if nextname == '' %}
  13. <form method="post" action="/login">
  14. {% module xsrf_form_html() %} # 返回form表单给浏览器时发送独有的标记,和cookie的信息相同。
    用来证明是服务器发送的
  15. <p>用户名:<input type="text", name="name"></p>
  16. <p>密码:<input type="password", name="password"></p>
  17. <input type="submit">
  18. </form>
  19. {% else %}
  20. <form method="post" action="/login?next={{nextname}}">
  21. {% module xsrf_form_html() %}
  22. <p>用户名:<input type="text", name="name"></p>
  23. <p>密码:<input type="password", name="password"></p>
  24. <input type="submit">
  25. {% end %}
  26. </form>
  27. </body>
  28. </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. how to check CAN frame

    1. check buffer size getsockopt(s, SOL_SOCKET, SO_SNDBUF,&snd_size, &optlen); setsockopt(s, ...

  2. hdu2067 小兔的棋盘 DP/数学/卡特兰数

    棋盘的一角走到另一角并且不越过对角线,卡特兰数,数据量小,可以当做dp求路径数 #include<stdio.h> ][]; int main() { ; ) { int i,j; lon ...

  3. spring boot 热部署devtools实现

    1.devtools spring为开发者提供了一个名为spring-boot-devtools的模块来使Spring Boot应用支持热部署,提高开发者的开发效率,无需手动重启Spring Boot ...

  4. MyBatis 与 Spring Data JPA 选择谁?

    MyBatis 与 Spring Data JPA 选择谁? https://www.v2ex.com/t/285081 jpa predicate优缺点 https://blog.csdn.net/ ...

  5. 总结:基于Oracle Logminer数据同步

    第 1 页 共 20 页 出自石山园主,博客地址:http://www.cnblogs.com/shishanyuan LogMiner 配置使用手册 1 Logminer 简介 1.1 LogMin ...

  6. Linux下C/C++代码调用PHP代码(转)

    Linux下C/C++代码可以通过popen系统函数调用PHP代码并通过fgets函数获取PHP代码echo输出的字符串. //main.c char str[1024] = {0}; char *  ...

  7. sqlserver 同义名的使用

    USE [ccflow5]GOdrop synonym ccusergo/****** Object:  Synonym [dbo].[ccuser]    Script Date: 11/12/20 ...

  8. Servlet和JSP比较

    1. 两者哟许多相似之处,都可以生成动态网页 2. JSP的优点是擅长于网页制作,生成动态页面,比较直观. JSP的缺点是不容易跟踪与拍错 3. Servlet是纯Java语言,擅长流程处理和业务逻辑 ...

  9. react组件的创建

    最近项目接触react和rn,之前会一些vue和小程序,起初写react是很难受的,尤其是jsx的写法,不过2周过后感觉写起来有点舒服了... 目前react的组件一共有3种方式:React.crea ...

  10. PREV-1_蓝桥杯_核桃的数量

    问题描述 小张是软件项目经理,他带领3个开发组.工期紧,今天都在加班呢.为鼓舞士气,小张打算给每个组发一袋核桃(据传言能补脑).他的要求是: 1. 各组的核桃数量必须相同 2. 各组内必须能平分核桃( ...