flask框架基本使用(3)(session与cookies)
#转载请留言联系
flask 框架基本使用(1):https://www.cnblogs.com/chichung/p/9756935.html
flask 框架基本使用(2):https://www.cnblogs.com/chichung/p/9761610.html
本文主要记录下在flask 框架下如何使用 cookie 与 session。
首先要明白几个概念。
状态保持
因为 http 是一种无状态协议,浏览器请求服务器是无状态的。
无状态:指一次用户请求时,浏览器、服务器无法知道之前这个用户做过什么,每次请求都是一次新的请求。
无状态原因:浏览器与服务器是使用 socket 套接字进行通信的,服务器将请求结果返回给浏览器之后,会关闭当前的 socket 连接,而且服务器也会在处理页面完毕之后销毁页面对象。
有时需要保持下来用户浏览的状态,比如用户是否登录过,浏览过哪些商品等
实现状态保持主要有两种方式:
在客户端存储信息使用
Cookie
在服务器端存储信息使用
Session
会话
会话,英文“session”,表示从用户访问我们当前访问开始,一直到用户关闭浏览器这个过程,就是一次会话,表示用户与当前网站之间进行了一次会话。
会话的开始:用户第一次访问当前网站
会话的结束:用户关闭浏览器
会话跟踪,也叫状态保持,主要目的就是为了识别每一次访问到我们网站页面的用户的行为。
1. flask 框架下使用 cookie
cookie 是什么?
(1) cookie 指某些网站为了辨别用户身份、进行会话跟踪而储存在用户本地的数据(通常经过加密)。
(2) cookie 是由服务器端生成,发送给客户端浏览器,浏览器会将 cookie 的 key/value 保存,下次请求同一网站时就发送该cookie 给服务器(前提是浏览器设置为启用 cookie )。
(3) cookie 是存储在浏览器中的一段纯文本信息,建议不要存储敏感信息如密码,因为电脑上的浏览器可能被其它人使用。
(4) cookie 基于域名安全,不同域名的 cookie 是不能互相访问的。
(5) 当浏览器请求某网站时,会将本网站下所有 cookie 信息提交给服务器,所以在 request 中可以读取 cookie 信息
cookie的应用
(1)最典型的应用是判定注册用户是否已经登录网站,用户可能会得到提示,是否在下一次进入此网站时保留用户信息以便简化登录手续,这些都是Cookie的功用。
(2)网站的广告推送,经常遇到访问某个网站时,会弹出小窗口,展示我们曾经在购物网站上看过的商品信息。(跨域)
from flask import Flask,make_response,request app=Flask(__name__) #设置cookie
@app.route("/login")
def login():
respond = make_response("登录成功")
respond.set_cookie("islogin","")
#此处可以设置时间,例如respond.set_cookie("username","chichung",10),
#表示10s后浏览器自动删除这个cookie,如果不设置时间就是管理浏览器时清除cookie
respond.set_cookie("username","chichung")
return respond #使用cookie
@app.route("/center")
def center():
if request.cookies.get("islogin") == "":
username = request.cookies.get("username")
return "%s的个人中心"%username
else:
return "没有登录" #删除cookie
@app.route("/logout")
def logout():
respond = make_response("登出成功")
#删除cookie,就是把cookie的有效期设置为0秒
respond.set_cookie("islogin","",0)
respond.set_cookie("username","",0)
# 设置cookie必须通过response返回,否则无法设置成功
return respond if __name__ == '__main__':
app.run(debug=True)
2. flask 框架下使用 session
session是什么?
session 依赖于 cookie ,原理与 cookie 基本类型,但是 session 是保存在服务端的。
对于敏感、重要的信息,建议要存储在服务器端,不能存储在浏览器中,如用户名、余额、等级、验证码等信息。
拓展:
上面的例子用 cookies 保存着登录状态与用户名,这是什么危险的。一旦遇到会一点JS的人用了你的电脑,document.cookie="islogin=1",document.cookie="username=你的用户名",就可以登录你的主页了。
from flask import Flask,session app=Flask(__name__)
app.secret_key="hdjkewqhuirhqw4e3ibr5iu432y895&^*%(7680" #必须要写secret_key,内容可以乱填 #设置session
#session是保存在服务器中的,所以session本身的有效期就是会话期,即第一次请求到关闭浏览器这段期间
@app.route("/login")
def login():
session["islogin"]=""
session["username"]="chichung"
return "登录成功" #使用session
@app.route("/center")
def center():
if session.get("islogin") == "":
return "%s的个人中心"%session.get("username")
else:
return "没有登录" #删除session
@app.route("/logout")
def logout():
session["username"]=None
session["islogin"]=None
return "登出成功" if __name__ == '__main__':
app.run()
flask框架基本使用(3)(session与cookies)的更多相关文章
- Flask框架(五) —— session源码分析
Flask框架(五) —— session源码分析 目录 session源码分析 1.请求来了,执行__call__方法 2.__call__方法 3.调用__call__方法 3.1.ctx = s ...
- Flask框架【七】—session组件详解
一.flask session简介 flask中session组件可分为内置的session组件还有第三方flask-session组件,内置的session组件缺点: 功能单一 session是保存 ...
- Flask 框架中 上下文基础理念,包括cookie,session存储方法,requset属性,current_app模块和g模块
Flask中上下文,分为请求上下文和应用上下文.既状态留存 ,就是把变量存在某一个地方可以调用 请求上下文:实际就是request和session用法理念,既都是可以存储东西. 应用上下文:既变量共享 ...
- flask框架--cookie,session
今天我又给大家分享一下怎么用flask框架来实现像淘宝购物车一样存储数据,并且把存储的数据删除,这个方法可以用两个方法都可以做成,一个是cookie,另一个是session. session是依赖于c ...
- 初识Flask框架,以及Flask中的模板语言jinjia2和Flask内置的Session
一.web框架的对比 首先我们先来看下比较火的web框架 1.Django: 优点:大而全,所有组件都是组织内部开发高度定制化,教科书级别的框架 缺点:大到浪费资源,请求的时候需要的资源较高 2.Fl ...
- Flask框架(二)—— 反向解析、配置信息、路由系统、模板、请求响应、闪现、session
Flask框架(二)—— 反向解析.配置信息.路由系统.模板.请求响应.闪现.session 目录 反向解析.配置信息.路由系统.模板.请求响应.闪现.session 一.反向解析 1.什么是反向解析 ...
- Flask框架(三)—— 请求扩展、中间件、蓝图、session源码分析
Flask框架(三)—— 请求扩展.中间件.蓝图.session源码分析 目录 请求扩展.中间件.蓝图.session源码分析 一.请求扩展 1.before_request 2.after_requ ...
- Python自动化运维之30、Flask框架
Flask 官网:http://flask.pocoo.org/ flask是一个基于Python开发并且依赖jinja2模板和Werkzeug WSGI服务的一个微型框架,对于Werkzeug本质是 ...
- Flask框架
FLask框架的简单介绍 Flask是一个基于Python开发并且依赖jinja2模板和Werkzeug WSGI服务的一个微型框架,对于Werkzeug本质是Socket服务端,其用于接收http请 ...
随机推荐
- Python locale 多语言模块和我遇到的坑
Table of Contents 1. locale遇到的问题 1.1. locale 简介 1.1.1. 什么是locale 1.1.2. locale 相关命令 1.2. Python loca ...
- 20145202马超 《Java程序设计》 实验一 实验报告
一.实验内容 1.使用JDK编译.运行简单的Java程序: 2.使用Eclipse 编辑.编译.运行.调试Java程序. 二.实验内容 1.完成在Windows环境下对IDEA的配置: 2.实现求正整 ...
- anr trace文件分析
测试给的trace文件好几万行,怎么看? 1.搜索 你的包名,看它报错误报在你代码的哪里 2.在你代码里面分析 还有,synchronized 就是用来防止多线程调用的,没有那么神奇.
- 6.bootstrap 将文本内容关联一个动作(手机端导航适配)&在超小尺寸下显示,屏幕变大后消失
1.情景:这是出现在手机端导航适配的,点击文本MENU可以出现下拉的list 解决方法: 1.首先要想到,MENU只有两个状态,因此可以用checkbox实现 2.将MENU放在label标签里面,l ...
- erlang节点互通查看
在局域网内部,一般用短节点名来完成短节点的全联通. 全联通的前提之一是cookie要相同,cookie记录在一个文件中. 对于同一个物理机上的两个erlang节点,不用其他配置就可以全 ...
- 一个python的文件对比脚本
脚本主要用来给游戏客户端做热更的. 处理方式就是针对每个文件求其MD5值,再根据文件的目录和名字对比两个版本的MD5值,如果不一样,则这次热更就需要更新这个文件. 用法很简单. 1,生成MD5码列表 ...
- selenium fluentwait java实例
本文转自:http://www.programcreek.com/java-api-examples/index.php?api=org.openqa.selenium.support.ui.Flue ...
- 使用puTTY或Xshell连接阿里云TimeOut超时
根据网上很多主流的说法,我依次检查了 ssh: service sshd status 防火墙:service iptables stop (CentOS 7好像已经没有这个iptable了) 都没有 ...
- 抓取HTML网页数据
(转)htmlparse filter使用 该类并不是一个通用的工具类,需要按自己的要求实现,这里只记录了Htmlparse.jar包的一些用法.仅此而已! 详细看这里:http://gundumw1 ...
- 软工实践Alpha冲刺(7/10)
队名:起床一起肝活队 组长博客:博客链接 作业博客:班级博客本次作业的链接 组员情况 组员1(队长):白晨曦 过去两天完成了哪些任务 描述: 已经解决登录注册等基本功能的界面. 完成非功能的主界面制作 ...