通过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方式验 ...
随机推荐
- 文件的存储GridFS
1.存储路径--->可以理解就是存储路径,然后在通过路径来获取文件 将文件放在本地路径(网络路径)下,然后数据库中存储该文件的查找路径 db.log.insert({filename:" ...
- MyEclipse2014配置Tomcat开发JavaWeb程序JSP以及Servlet
http://blog.csdn.net/21aspnet/article/details/21867241 1.安装准备 1).下载安装MyEclipse2014,这已经是最新版本. 2).下载 ...
- python绘制树枝
python是解释型语言,下面的程序深刻的说明了这个问题. import turtle def branch(length,level): if level<=0: return turtle. ...
- ReSharper2017.3的列对齐、排版格式、列对齐错误的修复
ReSharper代码排版格式 列对齐 本文提供全流程,中文翻译.Chinar坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) Chinar -- ...
- HDU 1114:Piggy-Bank(完全背包)
Piggy-Bank Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total ...
- hdu1059 dp(多重背包二进制优化)
hdu1059 题意,现在有价值为1.2.3.4.5.6的石头若干块,块数已知,问能否将这些石头分成两堆,且两堆价值相等. 很显然,愚蠢的我一开始并想不到什么多重背包二进制优化```因为我连听都没有听 ...
- TP3.2整合kindeditor
HTML <!-- KE图片上传 --> <link rel="stylesheet" href="__PUBLIC__/kindeditor/th ...
- 【socket编程】什么是socket编程
Socket简介 Socket是进程通讯的一种方式,即调用这个网络库的一些API函数实现分布在不同主机的相关进程之间的数据交换. 几个定义: (1)IP地址:即依照TCP/IP协议分配给本地主机的网络 ...
- python 二维list取列
b = [i[0] for i in a] # 从a中的每一行取第一个元素.
- gitlab使用笔记
一.git环境搭建 1.百度gitlab,找到其官网,注册gitlab账号(需要打开FQ软件),登录. 2.点击Profile Settings,然后点击SSH Keys 3.虚拟机中执行:ssh-k ...