文章目录

  • 一.会话技术
    • 1.介绍
    • 2.详细过程
  • 二.Cookie
    • 1.Cookie介绍
    • 2.Cookie登陆使用
  • 三.Session
    • 1.Session介绍
    • 2.Session登陆使用
    • 3.Session持久化问题
      • (1)持久化简介
      • (2)持久化实现方案
  • 四.cookie和session总结

一.会话技术

1.介绍

  1. 请求过程Request开始,到Response结束
  2. 连接都是短连接
  3. 延长交互的生命周期
  4. 将关键数据记录下来
  5. Cookie是保存在浏览器端/客户端的状态管理技术
  6. 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进行数据存储层,服务器中是不做任何存储。
其特性:

  1. 支持过期时间
       max_age 毫秒
       expries 具体日期
  2. 根据域名进行cookie存储
  3. 不能跨网站(域名)
  4. 不能跨浏览器
  5. 自动携带本网站的所有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总结

  1. cookie: 客户端浏览器的缓存;session: 服务端服务器的缓存
  2. cookie不是很安全,别人可以分析存放在本地的cookie并进行cookie欺骗,考虑到安全应当使用session
  3. session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能,考虑到减轻服务器性能方面,应当使用cookie
  4. 可以考虑将登陆信息等重要信息存放为session,其他信息如果需要保留,可以放在cookie中

Flask的会话技术:cookie、session以及session持久化问题相关推荐

  1. java ee会话_Java EE会话技术Cookie和Session

    会话技术 一.定义 会话技术是帮助服务器记住客户端状态的(区分客户端的).将客户访问的信息存在本地的叫Cookie技术,存在服务器上的叫Session技术. 注意: 一次会话何时开始?从打开一个浏览器 ...

  2. PHP自学之路----会话技术(cookie session)

    会话技术 l  什么是会话 打开浏览器,访问某个网站的很多资源(页面=)通过超链接),当你关闭浏览器后,一个会话结束. l  思考一个问题 在意个会话中,用户会产生一些数据,比如购物车,每个用户查看购 ...

  3. 会话技术Cookie

    1.会话技术的概念 会话∶浏览器和服务器之间的多次请求和响应. 为了实现一些功能,浏览器和服务器之间可能会产生多次的请求和响应,从浏览器访问服务器开始,到访问服务器结束(关闭浏览器.到了过期时间).这 ...

  4. 四、PHP基础——会话技术Cookie 和 Session

    会话技术初步认识 会话技术介绍 web会话可简单理解为:用户开一个浏览器,访问某一个web站点,在这个站点点击多个超链接,访问服务器多个web资源,然后关闭浏览器,整个过程称之为一个会话. HTTP协 ...

  5. Java Web 项目入门指南(http、Servlet、Request、Response、ServletContext、会话技术[cookie、session]、Filter、Listener)

    概述 web 服务器.项目.资源概述 web 服务器:可以被浏览器访问到的服务器 常见的 web 服务器: tomcat:中小型的服务器软件,免费开源,支持 JSP 和 Servlet apache ...

  6. 会话技术 —— Cookie 实现原理 || 在idea编辑器中设置代码的模板

    会话技术 1. 会话:一次会话中包含多次请求和响应.     * 一次会话:浏览器第一次给服务器资源发送请求,会话建立,直到有一方断开为止 2. 功能:在一次会话的范围内的多次请求间,共享数据 3. ...

  7. PHP会话技术cookie

    为什么要使用会话技术 我们在浏览网站的时候,访问每一个Web页面都是使用HTTP协议来实现的.由于HTTP协议是一个无状态的协议.这就会导致当一个用户请求一个页面以后,再请求该网站的其他页面,HTTP ...

  8. Java中 操作Servlet域中的值以及会话技术 cookie

    XML文件<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="ht ...

  9. 大数据WEB阶段(十二)会话技术、Cookie、Session及两者的区别

    会话技术 – Cookie与Session及其两者的区别 (一)会话技术 一.概述 1. 一个浏览器为了实现某一个功能对服务器产生了多次请求响应.从第一个请求开始访问服务器,会话开始,到最后一个页面访 ...

最新文章

  1. NCEPU:线下组队学习周报(008)
  2. 左右HttpClient上传的方法来解决中国的乱码
  3. Mybatis原理初探
  4. 第五章functions.py中的交叉熵代码解释
  5. java heroku_Heroku和Java –从新手到初学者,第2部分
  6. 域名服务器的配置文档,dns域名服务器的配置
  7. 计算机课中排序选什么,《计算机应用基础课件》1.6 排序复习课程.ppt
  8. 盘点填报功能的9大应用场景,解决填报难题(附模板)
  9. Android 系统(91)---Android 平台调试
  10. vue+ 下拉框有选择项 点击选项也拿到值就是页面不显示选中项
  11. idea快速搭建spring cloud-注册中心与注册
  12. 系统学习数字图像处理之目标识别
  13. Android的常用零碎代码块
  14. 使用DIME协议上传文件
  15. 菜鸟java基础--1
  16. smartdns 部署最佳实践
  17. 解决Word2013光标乱跳的问题
  18. java 正则判断二进制_如何在Java正则表达式匹配中使用IsAlphabetic二进制属性?
  19. python词频统计_用Python实现一个词频统计(词云+图)
  20. java根据位置信息切割图片

热门文章

  1. JS判断是电脑浏览器还是手机浏览器?
  2. js之数字取整的方法
  3. python如何设置画布开始位置_只要十分钟,Python绘图神器Turtle了解一下?
  4. 看看全球的共享单车啥样,基本都有停车桩
  5. python min函数的key用法
  6. C语言基础------题目1
  7. HTML+CSS3 表单与表格综合案例
  8. 光棍节程序员闯关秀第5关(总共10关)
  9. python大疆EP
  10. 用多智能体强化学习算法MADDPG解决“老鹰捉小鸡“问题