通过cookie验证用户登录
# cookie
# cookie
# 当你在浏览器登陆时,浏览器记录这个登录信息(服务器响应时发送请求的数据和登录信息),再次访问时 浏览器会将访问请求和缓存的登录信息都发送到服务器,
# 服务器通过这个信息判断用户是否已经登录 # @authenticated 需要
# application中配置好 login_url='login', 装饰器验证不通过则跳转到登录界面
# 写一个BaseHandler并重写get_current_user方法(该方法默认返回空)
# 该改写好 logain的登陆界面
import time
from tornado.web import authenticated # 装饰器
from data.user_module import User
define('port',default=8000,help='run port',type=int) # windows通过Ctrl+鼠标左键
define('version',default=0.1,help='version',type=str) class LoginHandler(tornado.web.RequestHandler): def get(self):
nextname=self.get_argument('next','') # 从/buy跳转到登陆界面是字符串传参自动传入了next=/buy
但是直接从logain登录nextname = '',可以根据这点在logain.html中写if判断,放入两个不同的action属性的form表单
self.render('login.html',
nextname=nextname,
error='' # login.html用到两个参数 nextname和error
) def post(self, *args, **kwargs):
nextname = self.get_argument('next', '') # 获取的上个跳转过来的路由
# 通过获取登录的用户信息去匹配数据库
user = self.get_argument('name', '')
username = User.by_name(user)
password = self.get_argument('password', '')
# 匹配后做出判断
if username and password == username[0].password:
self.set_secure_cookie('ID',username[0].username)
self.redirect(nextname)
else:
self.render('login.html', # 用户名或密码错误,再次登陆
nextname=nextname,
error='用户名或密码错误'
) class BaseHandler(tornado.web.RequestHandler): # authenticated装饰器需要改写get_current_user
def get_current_user(self):
current_user = self.get_secure_cookie('ID')
if current_user:
return current_user
return None class BuyHandler(BaseHandler):
@authenticated # 装饰器自动验证cookie,验证通过直接访问/buy,没有则跳转到登陆界面
def get(self):
self.write('欢迎你,尊贵的vip1000') application = tornado.web.Application(
handlers=[
(r"/login",LoginHandler),
(r"/buy",BuyHandler)
],
template_path='templates', # 表明页面html的路径
static_path='static', # 表明静态文件的位置
cookie_secret='miyao', # 设置密钥
login_url='login', # 装饰器验证不通过则跳转到登录界面
debug=True # 上传代码后服务器自动重启
) if __name__ == '__main__':
tornado.options.parse_command_line() # 通过sys.arg获取命令行输入参数(python xxx.py --port=xxx)
print(options.port)
print(options.version)
http_server = tornado.httpserver.HTTPServer(application) # 非阻塞
application.listen(options.port)
tornado.ioloop.IOLoop.instance().start() # 启动io循环
login.html
<body>
<--!用到了两个变量 error nextname-->
{% if error %}
用户名或密码错误
{% end %} <form method="post" action="/login?next={{nextname}}">
<p>用户名 <input type="text" name="name"></p><br>
<p>密码<input type="password" name="password"></p><br>
<input type="submit">
</form>
</body>
通过cookie验证用户登录的更多相关文章
- cookie实现用户登录验证
cookie实现用户登录验证 1, INSTALLED_APPS中注册app03 2,在主程序中新建映射关系到app3的url中 from django.conf.urls import url,in ...
- Asp.Net使用加密cookie代替session验证用户登录状态 源码分享
首先 session 和 cache 拥有各自的优势而存在. 他们的优劣就不在这里讨论了. 本实例仅存储用户id于用户名,对于多级权限的架构,可以自行修改增加权限字段 本实例采用vs2010编写 ...
- MVC4项目中验证用户登录一个特性就搞定
在开发过程中,需要用户登陆才能访问指定的页面这种功能,微软已经提供了这个特性. // 摘要: // 表示一个特性,该特性用于限制调用方对操作方法的访问. [AttributeUsage(Attribu ...
- MVC4验证用户登录特性实现方法
在开发过程中,需要用户登陆才能访问指定的页面这种功能,微软已经提供了这个特性. // 摘要: // 表示一个特性,该特性用于限制调用方对操作方法的访问. [AttributeUsage(Attribu ...
- 转:C4项目中验证用户登录一个特性就搞定
转:C4项目中验证用户登录一个特性就搞定 在开发过程中,需要用户登陆才能访问指定的页面这种功能,微软已经提供了这个特性. // 摘要: // 表示一个特性,该特性用于限制调用 ...
- 【转】MVC4验证用户登录特性实现方法
在开发过程中,需要用户登陆才能访问指定的页面这种功能,微软已经提供了这个特性. // 摘要: // 表示一个特性,该特性用于限制调用方对操作方法的访问. [AttributeUsage(Attribu ...
- [转]MVC4项目中验证用户登录一个特性就搞定
本文转自:http://www.mrhuo.com/Article/Details/470/A-Attribute-For-MVC4-Project-Used-To-Validate-User-Log ...
- 基于cookie的用户登录状态管理
cookie是什么 先来花5分钟看完这篇文章:https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Cookies 看完上文,相信大家对cookie已经有 ...
- 单点登录CAS使用记(三):实现自定义验证用户登录
问题: CAS自带的用户验证逻辑太过简单,如何像正常网站一样,通过验证DB中的用户数据,来验证用户以及密码的合法性呢? 方案1:CAS默认的JDBC扩展方案: CAS自带了两种简单的通过JDBC方式验 ...
随机推荐
- sourceinsight - imsoft.cnblogs
显示空格的问题,options->document options->visible space 前面的对勾去掉就好了 sourceinsight中文显示乱码问题彻底解决办法:http:/ ...
- MyEclipse快捷键及经验总结 绝对的有用 太给力了
Ctrl+Shift+L 显示所有快捷键 Ctrl+K 参照选中的词(Word)快速定位到下一个 Ctrl+Shift+K 参照选中的词(Word)快速定位到上一个 C ...
- CTF-练习平台-Misc之 想蹭网先接开密码
十三.想蹭网先接开密码 用wireshark打开,WiFi认证过程重点在WPA的四次握手包,找到EAPOL握手协议,另存为 根据题目提示,写字典 #include<stdio.h>int ...
- CH4101 银河英雄传说
题意 4101 银河英雄传说 0x40「数据结构进阶」例题 描述 公元五八○一年,地球居民迁移至金牛座α第二行星,在那里发表银河联邦创立宣言,同年改元为宇宙历元年,并开始向银河系深处拓展. 宇宙历七 ...
- All the Apache Streaming Projects: An Exploratory Guide
The speed at which data is generated, consumed, processed, and analyzed is increasing at an unbeliev ...
- smarty学习——变量
变量的处理对于模板来说是比较重要的. Smarty有几种不同类型的变量. 变量 的类型取决于它的前缀是什么符号(或者被什么符号包围) Smarty的变量可以直接被输出或者作为函数属性和修饰符(modi ...
- MVC5 + EF6 + Bootstrap3系列教程
本系列教程以ASP.NET MVC5为核心框架,使用Entity Framewok6访问数据,并使用Bootstrap3作为前端UI框架.帮助大家开发出一套高效.美观.稳定.实用的软件系统. MVC5 ...
- dslr control vis usb
nikon https://sdk.nikonimaging.com/apply/compmail.do Digital-SLR cameras We are offering L ...
- Spring Boot 整合 FastDFS 客户端
原文地址:Spring Boot 整合 FastDFS 客户端 博客地址:http://www.extlight.com 一.前言 前两篇介绍整体上介绍了通过 Nginx 和 FastDFS 的整合来 ...
- 大快搜索DKhadoop集群管理平台添加节点的步骤说明
Hadoop作为搭建大数据处理平台的重要“基石”,关于它的分析和讲解的文章已经有很多了.Hadoop本身是一分布式的系统,因此在安装的时候,需要多每一个节点进行组建的安装.并且由于是开源软件,其安装过 ...