Flask的会话技术:cookie、session以及session持久化问题
文章目录
- 一.会话技术
- 1.介绍
- 2.详细过程
- 二.Cookie
- 1.Cookie介绍
- 2.Cookie登陆使用
- 三.Session
- 1.Session介绍
- 2.Session登陆使用
- 3.Session持久化问题
- (1)持久化简介
- (2)持久化实现方案
- 四.cookie和session总结
一.会话技术
1.介绍
- 请求过程Request开始,到Response结束
- 连接都是短连接
- 延长交互的生命周期
- 将关键数据记录下来
- Cookie是保存在浏览器端/客户端的状态管理技术
- Session是服务器端的状态管理技术
2.详细过程
在浏览器中输入域名url,会经过dns服务器将域名解析成ip返回后,浏览器发送request对象请求给服务器,服务器收到请求后创建一个session对象,该对象会有个session_key的值,服务器会将该值以set_cookie消息头的形式发送给浏览器,浏览器接收到后,会将session_key的变量定义为session_id,session_id会存储在cookie中,当浏览器再次访问时,就会携带着session_id去服务器找对应的数据。
二.Cookie
1.Cookie介绍
Cookie是一种客户端会话技术,所有数据存储在客户端,其是以key-value进行数据存储层,服务器中是不做任何存储。
其特性:
- 支持过期时间
max_age 毫秒
expries 具体日期 - 根据域名进行cookie存储
- 不能跨网站(域名)
- 不能跨浏览器
- 自动携带本网站的所有cookie
Cookie是服务器操作客户端的数据,通过Response进行操作。
2.Cookie登陆使用
设置cookie response.set_cookie('username',username)
获取cookie username = request.cookies.get('username','游客')
删除cookie response.delete_cookie('username')
登录案例:
(1)执行tologinCookie跳转到loginCookie的页面,再页面中输入名字,点击提交
(2)跳转到welcomeCookie页面,显示 欢迎xxx来到英雄联盟
(3)如果登陆进入到了welcomeCookie的页面,在欢迎xxx来到英雄联盟的下面有一个退出,点击退出之后,显示欢迎游客来到英雄联盟。
在视图函数中添加:
# 跳转到登陆的页面
@blue.route('/toLoginCookie/')
def toLoginCookie():return render_template('loginCookie.html')
在模板中创建loginCookie.html文件
#避免写硬代码,使用反向解析url_for<form action="{{ url_for('blue.loginCookie') }}" method="post"><input type="text" name="name"><button>提交</button></form>
运行结果:
提交之后 执行的action的路由
@blue.route('/loginCookie/', methods=['get', 'post'])
def loginCookie():name = request.form.get('name')response = redirect(url_for('blue.welcomeCookie'))response.set_cookie('name', name)return response
@blue.route('/welcomeCookie/')
def welcomeCookie():# get方法如果可以获取name值,那么就会得到name值;如果获取不到,那么就给默认值name = request.cookies.get('name', '游客')return render_template('welcomeCookie.html', name=name)
在模板中创建welcomeCookie.html文件
欢迎{{ name }}来到英雄联盟<br>{% if name == '游客' %}<a href="{{ url_for('blue.toLoginCookie') }}">登陆</a>{% else %}<a href="{{ url_for('blue.logout') }}">退出</a>{% endif %}
运行结果:
点击退出之后,显示欢迎游客来到英雄联盟。
@blue.route('/logout/')
def logout():response = redirect(url_for('blue.welcomeCookie'))
# 清除cookieresponse.delete_cookie('name')return response
运行结果:
三.Session
1.Session介绍
session是一种服务端会话技术,其把所有数据存储在服务器中,默认存在服务器的内存中,其的存储结构也是key-value形式。
注意:
单纯的使用session是会报错的,需要使用在__init__方法中配置app.config[‘SECRET_KEY’]=‘110’。
django中的session默认做了数据持久化(存在了数据库中)
2.Session登陆使用
设置 session['username'] = username获取 session.get('username')删除 resp.delete_cookie('session') 或者 session.pop('username')
登陆案例,如cookie一样:
在views中:
@blue.route('/toLoginSession/')
def toLoginSession():return render_template('loginSession.html')@blue.route('/loginSession/',methods=['get','post'])
def loginSession():name = request.form.get('name')session['name']=namereturn redirect(url_for('blue.welcomeSession'))@blue.route('/welcomeSession/')
def welcomeSession():name = session.get('name','游客')return render_template('welcomeSession.html',name=name)@blue.route('/logoutSession/')
def logoutSession():# session.pop('name')response = redirect(url_for('blue.welcomeSession'))# 删除cookie的key值叫做sessionresponse.delete_cookie('session')return response
创建loginSession.html文件:
<body><form action="{{ url_for('blue.loginSession') }}" method="post"><input type="text" name="name"><button>提交</button></form>
</body>
创建welcomeSession.html文件:
<body>欢迎{{ name }}光临<a href="{{ url_for('blue.logoutSession') }}">退出</a>
</body>
运行结果:
如果出现上面的报错,那么可能就是你没有在init文件中添加app.config[‘SECRET_KEY’]=‘110’。(110:此数字不固定,可填你喜欢的数字)
添加之后,则会运行成功。
3.Session持久化问题
(1)持久化简介
1.django中对session做了持久化,存储在数据库中
2.flask中没有对默认session进行任何处理
- flask-session 可以实现session的数据持久化
- 可以持久化到各种位置,更推荐使用redis
- 缓存在磁盘上的时候,管理磁盘文件使用lru, 最近最少使用原则
(2)持久化实现方案
a.安装flask-session
pip install flask-session
b.初始化Session对象
持久化的位置:配置init中 app.config[‘SESSION_TYPE’] = ‘redis’
c.如果指定的持久化的位置是redis,那么我们就需要依赖于redis的库,所以需要pip install redis
d.创建Sessin的对象(2种):
(1) Sesssion(app=app)
(2) session = Session()
session.init_app(app=app)
e.需要配置SECRET_KEY=‘110’
持久化的时候,是不需要写secret_key的,但是为了数据安全,强制性添加
f.存储到redis中的数据的前缀设置
app.config[‘SESSION_KEY_PREFIX’]=‘flask’
flask的session的生存时间是31天,django的session生存时间是14天
四.cookie和session总结
- cookie: 客户端浏览器的缓存;session: 服务端服务器的缓存
- cookie不是很安全,别人可以分析存放在本地的cookie并进行cookie欺骗,考虑到安全应当使用session
- session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能,考虑到减轻服务器性能方面,应当使用cookie
- 可以考虑将登陆信息等重要信息存放为session,其他信息如果需要保留,可以放在cookie中
Flask的会话技术:cookie、session以及session持久化问题相关推荐
- java ee会话_Java EE会话技术Cookie和Session
会话技术 一.定义 会话技术是帮助服务器记住客户端状态的(区分客户端的).将客户访问的信息存在本地的叫Cookie技术,存在服务器上的叫Session技术. 注意: 一次会话何时开始?从打开一个浏览器 ...
- PHP自学之路----会话技术(cookie session)
会话技术 l 什么是会话 打开浏览器,访问某个网站的很多资源(页面=)通过超链接),当你关闭浏览器后,一个会话结束. l 思考一个问题 在意个会话中,用户会产生一些数据,比如购物车,每个用户查看购 ...
- 会话技术Cookie
1.会话技术的概念 会话∶浏览器和服务器之间的多次请求和响应. 为了实现一些功能,浏览器和服务器之间可能会产生多次的请求和响应,从浏览器访问服务器开始,到访问服务器结束(关闭浏览器.到了过期时间).这 ...
- 四、PHP基础——会话技术Cookie 和 Session
会话技术初步认识 会话技术介绍 web会话可简单理解为:用户开一个浏览器,访问某一个web站点,在这个站点点击多个超链接,访问服务器多个web资源,然后关闭浏览器,整个过程称之为一个会话. HTTP协 ...
- Java Web 项目入门指南(http、Servlet、Request、Response、ServletContext、会话技术[cookie、session]、Filter、Listener)
概述 web 服务器.项目.资源概述 web 服务器:可以被浏览器访问到的服务器 常见的 web 服务器: tomcat:中小型的服务器软件,免费开源,支持 JSP 和 Servlet apache ...
- 会话技术 —— Cookie 实现原理 || 在idea编辑器中设置代码的模板
会话技术 1. 会话:一次会话中包含多次请求和响应. * 一次会话:浏览器第一次给服务器资源发送请求,会话建立,直到有一方断开为止 2. 功能:在一次会话的范围内的多次请求间,共享数据 3. ...
- PHP会话技术cookie
为什么要使用会话技术 我们在浏览网站的时候,访问每一个Web页面都是使用HTTP协议来实现的.由于HTTP协议是一个无状态的协议.这就会导致当一个用户请求一个页面以后,再请求该网站的其他页面,HTTP ...
- Java中 操作Servlet域中的值以及会话技术 cookie
XML文件<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="ht ...
- 大数据WEB阶段(十二)会话技术、Cookie、Session及两者的区别
会话技术 – Cookie与Session及其两者的区别 (一)会话技术 一.概述 1. 一个浏览器为了实现某一个功能对服务器产生了多次请求响应.从第一个请求开始访问服务器,会话开始,到最后一个页面访 ...
最新文章
- NCEPU:线下组队学习周报(008)
- 左右HttpClient上传的方法来解决中国的乱码
- Mybatis原理初探
- 第五章functions.py中的交叉熵代码解释
- java heroku_Heroku和Java –从新手到初学者,第2部分
- 域名服务器的配置文档,dns域名服务器的配置
- 计算机课中排序选什么,《计算机应用基础课件》1.6 排序复习课程.ppt
- 盘点填报功能的9大应用场景,解决填报难题(附模板)
- Android 系统(91)---Android 平台调试
- vue+ 下拉框有选择项 点击选项也拿到值就是页面不显示选中项
- idea快速搭建spring cloud-注册中心与注册
- 系统学习数字图像处理之目标识别
- Android的常用零碎代码块
- 使用DIME协议上传文件
- 菜鸟java基础--1
- smartdns 部署最佳实践
- 解决Word2013光标乱跳的问题
- java 正则判断二进制_如何在Java正则表达式匹配中使用IsAlphabetic二进制属性?
- python词频统计_用Python实现一个词频统计(词云+图)
- java根据位置信息切割图片