tornado 09 cookie和session

一、cookie

#有什么办法能够让浏览器记住登录信息,下次再打开的时候可以自动登录?网站是如何记录登录信息的?
class SetCookieHandler(tornado.web.RequestHandler):
def get(self):
self.set_cookie('cookie_test','xuwei') #到期时间为会话结束
self.set_cookie('cookie_test2','zhouxuming',expires=time.time()+60) #到期时间设置60s
self.set_cookie('cookie_test3','liuzezhong',expires_days=1) #到期时间设置1天
self.set_cookie('cookie_test4','liuzezhong1',path='/') #获取路径
self.set_cookie('cookie_test5','liuzezhong2',httponly = True) #JS就不会被cookie获取到
self.set_cookie('cookie_test6','liuzezhong3',max_age = 120 , expires=time.time()+60) #max_age优先级比expires高,前面为120s,所以根据前面的来
self.set_secure_cookie('cookie_test7','xuchengcheng') #设置一个加密的cookie,但是必须在下面的application里面添加cookie_secret = 'lidang',才可以
self.write('set cookie') class GetCookieHandler(tornado.web.RequestHandler):
def get(self):
get_cookie = self.get_cookie('cookie_test')
get_cookie2 = self.get_cookie('cookie_test2')
get_cookie3 = self.get_secure_cookie('cookie_test7')
print(get_cookie,get_cookie2,get_cookie3)
self.write('get cookie')

二、验证登录

  如何实现自动验证

#1、导入装饰器
from tornado.web import authenticated #2、设置BaseHandler类,重写函数get_current_user
class BaseHandler(tornado.web.RequestHandler):
def get_current_user(self): #前面有绿色小圆圈带个o,再加一个箭头表示重写
current_user = self.get_secure_cookie('ID')
if current_user:
return current_user
return None #3、在LoginHandler类中的post函数里面加上
self.set_secure_cookie('ID',user) #4、在BuyHandler类里面添加装饰器
class BuyHandler(BaseHandler):
@authenticated
def get(self):
self.write('许铖铖买了好多书') #5、在application里面设置跳转路由
login_url = '/login',

  在登录完成后,从一个路由跳转到登录页面,在完成登录之后,该如何跳到之前的页面

#1、获取之前的路由
#在使用authenticated之后,如果验证不成功,会自动跳转登陆路由,并且在URL后面添加上next参数,next参数的参数值就是之前的路由
def get(self, *args, **kwargs):
nextname = self.get_argument('next','') #将原来的路由赋值给nextname
self.render('lesson2.html',nextname = nextname) #跳转到html后 #2、修改模板文件
#在html模板中添加next参数,并且参数值为之前的路由
<form method="post" action="/login?next={{ nextname }}"> #3、修改post方法
#获取之前的页面的路由,当登录验证通过之后,设置加密的cookie,并跳转到之前的路由
def post(self, *args, **kwargs):
nextname = self.get_argument('next','') #获取之前页面的路由
user = self.get_argument('name')
password = self.get_argument('password','')
username =User.by_name(user)
if username and password == username[0].password:
self.set_secure_cookie('ID',user)
self.redirect(nextname) #跳转带之前的路由
else:
self.render('lesson2.html',nextname=nextname)

三、session

#cookie的信息可以用来保存用户的登录信息,但是cookie是很容易被拦截的,所以其中必定不能有用户的任何私密信息,有没有一种办法可以让服务器保存用户的登录信息,但是cookie中又不会有用户的任何信息?
#1、安装模板
#在MySQL里面输入pip install pycket ;pip install redis
#或者
#file--->Default Settings ---> Project Interpreter ---->绿色加号 添加模块 #2、 导入模块
from pycket.session import SessionMixin #3、继承SessionMixin
class BaseHandler(tornado.web.RequestHandler,SessionMixin): class LoginHandler(tornado.web.RequestHandler,SessionMixin): #4、在application里面添加配置
pycket = {
'engine':'redis',
'storage':{
'host':'localhost',
'port':6379,
'db_sessions':5,
'db_notifications':11,
'max_connections':2 ** 33,
},
'cookie':{
'expires_days':38,
'max_age':100
}
} #5、在BaseHandler里面修改设置cookie为设置session
current_user = self.session.get('user') #6、在LoginHandler里面的post里面修改获取cookie为获取session
self.session.set('user',username[0].username)

四、XSRF

#使用session可以保证用户信息不被cookie泄露,那如果攻击者不想获取用户信息,只是在提交form表单是攻击,该如何防范?

#只需要在html模板中添加  {% module xsrf_form_html() %}  即可
#当登录信息发送到服务器中去的时候,form表单和cookie里面都会有一个随机码,如果发送到服务器的时候这两个码不相同,那就表示被拦截了,服务器会拒绝客户端发送的请求

tornado 09 cookie和session的更多相关文章

  1. web框架--tornado之cookie与session初识

    cookie的本质其实就是在浏览器端保存的键值对, 每当浏览器端发送一次请求, 都会将这些键值对附加在请求中并发送给服务器端. 一.目录结构 二.main_pro.py #!/usr/bin/env ...

  2. Django实现表单验证、CSRF、cookie和session、缓存、数据库多表操作(双下划綫)

    通常验证用户输入是否合法的话,是前端js和后端共同验证的,这是因为前端js是可以被禁用的,假如被禁用了,那就没法用js实现验证合法与否了,也就是即使用户输入的不合法,但是也没提示,用户也不知道怎么输入 ...

  3. django的cookie和session以及内置信号、缓存

    cookie和session cookie和session的作用: cookie和session都记录了客户端的某种状态,用来跟踪用户访问网站的整个回话.两者最大的区别是cookie的信息是存放在浏览 ...

  4. Tornado中Cookie过期问题

    首先,web应用程序是使用HTTP协议进行数据传输,因为HTTP协议是无状态的,所以一旦提交数据完成后,客户端和服务器端的连接就会被关闭,再次进行数据的交换就得重新建立新的连接,那么,有个问题就是服务 ...

  5. Django之Form、CSRF、cookie和session

    Django是一个大而全的web框架,为我们提供了很多实用的功能,本文主要介绍Form.CSRF.cookie和session 一.Form 在web页面中form表单是重要的组成部分,为了数据安全和 ...

  6. 【转】Cookie和Session的区别详解

    转载地址:http://www.phperzone.cn/portal.php?aid=541&mod=view 一.cookie机制和session机制的区别 具体来说cookie机制采用的 ...

  7. python_way day19 HTML-day5 (form表单验证,CSRF,cookie,session,缓存)

    python-way day19 1. dJango的form表单验证 2.CSRF 跨站请求伪造 3.cookie,session 4.缓存 一,django表单验证功能 1.django验证基础: ...

  8. Magento怎么设置和使用Cookie和Session?

    Magento中cookie和session是已经封装了的 Magento的核心对象-Mage_Core_Model_Cookie & Mage_Core_Model_Session Mage ...

  9. Day19 Django之Form表单验证、CSRF、Cookie、Session和Model操作

    一.Form表单验证 用于做用户提交数据的验证1.自定义规则 a.自定义规则(类,字段名==html中的name值)b.数据提交-规则进行匹配代码如下: """day19 ...

随机推荐

  1. ORA-01940:无法删除当前已链接的用户

    (1)查看用户的连接状况 select user name, sid, serial# from v$session; (2)找到要删除用户的sid,和serial,并删除 例如要删除用户nc633t ...

  2. 【HDU5857】Median

    题意 给出一个长度为n的有序序列.给出m个询问,每个询问包括四个正整数l1,r1,l2,r2你用l1tor1的和l2tor2的元素来组成一个新的序列,然后找出这个序列的中位数. 分析 这是当时Spri ...

  3. codeforce 460DIV2 D题

    感觉这个题不错,对拓扑排序有了更深的了解,用两种拓扑排序都写了些试试. dfs #include <cstdio> #include <algorithm> #include ...

  4. 数据结构》关于差分约束的两三事(BZOJ2330)

    差分约束,主要用来解决数学中的线性规划问题,通过差值与两个未知数可以转化为单源最长路问题(或负值最短路). 当有一个式子为x1-x2>=a时,我们可以建边,这条边设定为x1比x2大等a(或x2比 ...

  5. Net-tools

    一.简介 Net-tools 包含如下程序,构成了 Linux 网络的基础. arp用来操作核心的ARP(地址解析协议)的高速缓存,通常用来增加.删除一个条目以及转储ARP高速缓存. dnsdomai ...

  6. C语言多线程

    http://www.cnblogs.com/lixiaohui-ambition/archive/2012/07/26/2610336.html

  7. LightOJ 1248 Dice (III) (水题,期望DP)

    题意:给出一个n面的色子,问看到每个面的投掷次数期望是多少. 析:这个题很水啊,就是他解释样例解释的太...我鄙视他,,,,, dp[i] 表示 已经看到 i 面的期望是多少,然后两种选择一种是看到新 ...

  8. Unity3D面试题整合

    第一部分 1. 请简述值类型与引用类型的区别答:区别:1.值类型存储在内存栈中,引用类型数据存储在内存堆中,而内存单元中存放的是堆中存放的地址.2.值类型存取快,引用类型存取慢.3.值类型表示实际数据 ...

  9. MongoDB整理笔记の走进MongoDB世界

    本人学习mongodb时间不长,但是鉴于工作的需要以及未来发展的趋势,本人想更深层的认识mongodb底层的原理以及更灵活的应用mongodb,边学边工作实践.  mongodb属于nosql中算是最 ...

  10. EBS登陆界面个性化

    把完整资料贴出来 Set the profile option Local Login Mask (FND_SSO_LOCAL_LOGIN_MASK). (This profile option is ...