Python Flask,cookie,session ,设置、获取、删除
使用Response类的set_cookie()方法可以设置cookie:
Response.set_cookie(
key, //键
value='', //值
max_age=None, //秒为单位的cookie寿命,None表示http-only
expires=None, //失效时间,datetime对象或unix时间戳
path='/', //cookie的有效路径
domain=None, //cookie的有效域
secure=None,
httponly=False)
显然,如果要设置cookie,我们要自行构造Response对象,而不是交给Flask框架去完成这件事。
示例:在访问首页/时设置cookie,并在访问/page2时读取cookie:
@app.route('/')
def index():
rsp = make_response('go <a href="%s">page2</a>' % '/page2')
rsp.set_cookie('user','JJJJJohnny')
return rsp
@app.route('/page2')
def page2():
user = request.cookies['user']
return 'you are %s' % user
会话/Session是为Web服务器建立状态的一个成熟模式。会话主要解决两个问题:
访问者的标识问题
服务器需要识别来自同一访问者的请求。这主要是通过浏览器的cookie实现的。 访问者在第一次访问服务器时,服务器在其cookie中设置一个唯一的ID号——会话ID。 这样,访问者后续对服务器的访问头中将自动包含该信息,服务器通过这个ID号,即可区 隔不同的访问者。
Flask框架中,每当一个请求进来时会自动根据请求中cookie的会话ID创建 一个Session类的实例对象。你可以查看当前请求的cookie验证这一点(会话ID的键 默认为session):
@app.route('/')
def v_index():
return request.cookies['session']
访问者信息的记录问题
服务器可以记录、提取指定访问者的历史信息。对每一个会话ID,服务端维护一个 数据上下文,这个数据运行在内存中,通常在变化时持久化到文件系统中或数据库中。
在视图函数内,Flask提供了一个全局对象session,它始终等效于当前请求所对应的 Session类实例对象。Session类定义了get_item()方法和set_item()方法, 因此我们可以像使用Dict对象一样,通过[]操作符读取或设置会话变量:
@app.route('/')
if !session['user']:
return redirect('/login')
return 'some restricted for authorized users only'
由于默认情况下,Flask将会话对象加密后存储在客户端的cookie里,因此必须要 为应用实例的secret_key属性配置一个加密种子才能使用session:
app.secret_key = 'sth. random as a encrypt key.'
# coding:utf-8 from flask import Flask, make_response, request app = Flask(__name__) # 设置cookie
@app.route("/set_cookie")
def set_cookie():
resp = make_response("success") # "success"是响应体
# 设置cookie, 默认有效期是临时cookie,浏览器关闭就失效
resp.set_cookie("Name", "Python")
# max_age设置有效期,单位:秒
resp.set_cookie("Name2", "Python1", max_age=3600)
# 设置cookie其实就是通过设置响应头实现的。
# resp.headers["Set-Cookie"] = "Name3=Python3; Expires=Sat, 18-Nov-2017 04:36:04 GMT; Max-Age=3600; Path=/"
return resp # 获取cookie
@app.route("/get_cookie")
def get_cookie():
c = request.cookies.get("Name")
return c # 删除cookie
@app.route("/delete_cookie")
def delete_cookie():
resp = make_response("del success")
# 删除cookie
resp.delete_cookie("Name1")
return resp if __name__ == '__main__':
app.run(debug=True)
Flask学习笔记(十六) cookie与session
一、了解概念
http请求无状态
在网站中,http请求是无状态的。也就是说即使第一次和服务器连接后并且登录成功后,第二次请求服务器依然不能知道当前请求是哪个用户。
cookie
cookie的出现就是为了解决这个问题,cookie本质是一种存储机制,为了存储用户相关的信息。
第一次登录后服务器返回一些数据(cookie)给浏览器,然后浏览器保存在本地,当该用户发送第二次请求的时候,就会自动的把上次请求存储的cookie数据自动的携带给服务器,服务器通过浏览器携带的数据就能判断当前用户是哪个了。
第一次访问后,浏览器会自动保存服务器发过来的cookie数据,以便再次请求这个网站时让服务器"记住"用户!
cookie特性
cookie存储的数据量有限,不同的浏览器有不同的存储大小,但一般不超过4KB。因此使用cookie只能存储一些小量的数据。
cookie有有效期:服务器可以设置cookie的有效期,以后浏览器会自动的清除过期的cookie。
cookie有域名的概念:只有访问同一个域名,才会把之前相同域名返回的cookie携带给服务器。也就是说,访问谷歌的时候,不会把百度的cookie发送给谷歌。
session
我们不可能把用户的个人信息直接存储到cookie中,那样太不安全了! 为了解决这种问题,session就诞生了~
不同的是,cookie是存储在本地浏览器,session是一个思路、一个概念、一个服务器存储授权信息的解决方案,不同的服务器,不同的框架,不同的语言有不同的实现。总之,它是为了解决cookie存储数据不安全的问题的。
Flask中的session机制是将session信息加密,然后存储在cookie中!!!!
session与cookie
session是一个设计思想,通常和cookie结合使用。有session存储在服务器端和session存储到客户端两种方案。Flask中的session机制是将session信息加密,然后存储在cookie中!!!!
关于cookie和session,就比如,你预定了一个旅店房间,首先你会得到一个凭证(cookie)。那天,你带着你的凭证(cookie)去旅店入住,旅店(服务器)老板先要拿着你的凭证(cookie)去核对信息(client side session),通过session信息找到你的预定房间,确认你的信息然后才能允许你入住,你可以在旅店(服务器)里搞一些事情。当某一天你的房间期限到了(session失效时),也就不能入住了。
二、具体操作
flask中操作cookie
通过response对象来操作,可以在response返回之前,通过response.set_cookie来设置。通过键值对来读写cookie,具体参数可以查看函数原型。下面是示例代码
from flask import Flask,Response,request #目的:练习cookie的使用 app = Flask(__name__) #实例化一个app #用户通过服务器get cookie的值(通过浏览器存储到本地)
@app.route("/get_cookie")
def get_cookie():
reps = Response("获取cookie!!!")
reps.set_cookie('username','hinzer')
return reps #请求服务器删除cookie
@app.route("/del_cookie")
def del_cookie():
reps = Response("删除cookie!!!")
reps.delete_cookie("username")
return reps #请求查询存储在cookie的用户信息
@app.route("/")
def index():
username = request.cookies.get("username")
if username:
return username
else:
return u"没有获取到cookie" if __name__ == '__main__':
app.run()
通过浏览器来验证



flask操作session:
session是存储在服务器端的,操作与cookie类似。在flask中通过将session加密,然后存储到cookie中,保存到浏览器、看代码
from flask import Flask,session
import os
from datetime import timedelta #目的:练习session的操作 app = Flask(__name__)
app.config['SECRET_KEY'] = os.urandom(24) #使用一组随机数对session进行加密
app.config['PERMANENT_SESSION_LIFETIME'] = timedelta(hours=2) #修改session 过期时间 --> session.permanent = True #用户请求设置session
@app.route('/get_session/')
def get_session():
session['username'] = 'hinzer'
session['user_id'] = ''
# permanent:持久化(默认过期时间是31天)
session.permanent = True
# print(type(session))
return '设置session!' #用户请求清除session
@app.route('/del_session/')
def delete_session():
session.clear()
return '清除session' #用户请求查询session
@app.route('/')
def index():
username = session.get('username')
user_id = session.get('user_id')
print(user_id)
return username or '没有session' if __name__ == '__main__':
app.run()
PS:由于http的请求无状态,我们可以通过程序上下文(临时存储对象),来保证一些重要的信息。比如session的key值,方便我们在程序中查询和处理。之后有机会会详细介绍一下、、
Python Flask,cookie,session ,设置、获取、删除的更多相关文章
- 20180909 解析JS Cookie的设置,获取和检索
引用: JavaScript Cookie - by runoob.com Cookie是储存在电脑文本文件中的数据,用于保存访问者的信息,并可以在下次打开页面时引用. 页面在设置/引用访问者信息时, ...
- 如何设置,获取,删除cookie?
cookie : 存储数据,当用户访问了某个网站(网页)的时候,我们就可以通过cookie来像访问者电脑上存储数据 1.不同的浏览器存放的cookie位置不一样,也是不能通用的 2.cookie的存储 ...
- springboot项目:登录 登录aop拦截 使用Redis与cookie 进行设置获取清除操作
登录.登出: 第一步:在pom文件中引入依赖 <dependency> <groupId>org.springframework.boot</groupId> &l ...
- js中的cookie的设置获取和检查
设置cookiefunction setCookie(cname,cvalue,exdays) { var d = new Date(); d.setTime(d.getTime()+(exdays* ...
- PHP0022:PHP SESSION 设置修改删除
- Cookie的属性(cookie的设置、获取和删除)
每个cookie都有四个可选的属性,他们分别控制cookie的生存周期.可见性.安全性等. Cookies最初设计时,是为了CGI编程.但是,我们也可以使用Javascript脚本来操纵cookies ...
- 9.Flask Cookie和Session
1.1.概念 cookie:在网站中,http请求是无状态的.也就是说即使第一次和服务器连接后并且登录成功后,第二次请求服务器依然不能知道当前请求是哪个用户.cookie的出现就是为了解决这个问题,第 ...
- Flask Cookie和Session
1.1.概念 cookie:在网站中,http请求是无状态的.也就是说即使第一次和服务器连接后并且登录成功后,第二次请求服务器依然不能知道当前请求是哪个用户.cookie的出现就是为了解决这个问题,第 ...
- flask 的session
python的flask操作设置.获得与删除session 首先讲一下Python的flask中session与cookies的关系,session是储存在服务器中的,cookies是储存在浏览器本地 ...
- Python面向对象基础:设置对象属性
用类存储数据 类实际上就是一个数据结构,对于python而言,它是一个类似于字典的结构.当根据类创建了对象之后,这个对象就有了一个数据结构,包含一些赋值了的属性.在这一点上,它和其它语言的struct ...
随机推荐
- openresty获取nginx中的变量
在OpenResty中如何引用这些变量呢? 规则很简单, 如$remote_addr, 在OpenResty里面使用就是ngx.var.remote_adddr.
- Windows7用VirtualBox虚拟Ubuntu共享文件夹的终极方式
在Win7用VirtualBox虚拟机安装Ubuntu后,共享文件夹再也不用手工mount了 安装增强工具包 设置共享文件夹后 VB已经自动挂载Windows文件夹到 /media/sf_*** 目录 ...
- 面试题——SSM面试题
树木丛生红火火 树木丛生红火火 微信公众号:Java全栈开发大联盟 原文地址:https://note.youdao.com/ynoteshare1/index.html?id=3f81baea7 ...
- MyBatis-08-使用注解开发
8.使用注解开发 8.1.面向接口编程 面向接口编程的根本原因:解耦,可拓展,提高复用,分层开发中.上层不用管具体的实现,大家都遵守共同的标准,使得开发变得容易,规范性好 8.2.使用注解开发 注解在 ...
- canvas drawImage图片不显示问题
初次学习canvas,用来做笔记记录下遇到的问题及解决方案 这里是要将一张图片写到canvas里,按照网上搜索,初写了段代码,可是却没显示,以为是路径问题,不能跨域名使用,后来改为相对路径后,仍然无效 ...
- SpringBoot AOP注解式拦截与方法规则拦截
AOP的本质还是动态代理对方法调用进行增强. SpringBoot 提供了方便的注解实现自定义切面Aspect. 1.使用需要了解的几个概念: 切面.@Aspect 切点.@Pointcut. 通知. ...
- React-router的使用:标签跳转和编程式跳转
目录: 1.demo:NavLink 标签跳转 2.标签渲染路由组件时,获取url参数 3.编程式跳转 参考文档 1)https://reacttraining.com/react-router/we ...
- Educational Codeforces Round 34 (Rated for Div. 2) B题【打怪模拟】
B. The Modcrab Vova is again playing some computer game, now an RPG. In the game Vova's character re ...
- hdu 2510
Tiling_easy version Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) ...
- 【luoguP1311 】选择客栈
题目描述 丽江河边有nn家很有特色的客栈,客栈按照其位置顺序从 11到nn编号.每家客栈都按照某一种色调进行装饰(总共 kk 种,用整数 00 ~k-1k−1 表示),且每家客栈都设有一家咖啡店,每家 ...