Flask 学习之cookie和session操作

***1.cookie 和session *** **cookie 概述** ``` cookie:在网站中, http请求是无状态的。也就是说即使第一次和服务器连接后并且登录成功 后,第二次请求服务器依然不能知道当前请求是哪个用户。 cookie 的出现就是为了解决这个 问题,第一次登录后服务器返回一些数据(cookie)给浏览器,然后浏览器保存在本地,当该 用户发送第二次请求的时候,就会自动的把上次请求存储的 cookie 数据自动的携带给服务 器,服务器通过浏览器携带的数据就能判断当前用户是哪个了。 cookie 存储的数据量有限, 不同的浏览器有不同的存储大小,但一般不超过4KB。因此使用 cookie 只能存储一些小量的 数据 1.Cookie 有有效期: 服务器可以设置cookie有效期,以后浏览器会清除cookie信息 2.Cookie 和域名有关系概念; ``` **sesson概述** ``` session: session和cookie的作用有点类似,都是为了存储用户相关的信息。不同的 是, cookie 是存储在本地浏览器, session 是一个思路、一个概念、一个服务器存储授权信 息的解决方案,不同的服务器,不同的框架,不同的语言有不同的实现。虽然实现不一样,但 是他们的目的都是服务器为了方便存储数据的。 session 的出现,是为了解决 cookie 存储数 据不安全的问题的 ``` **cookie和session结合使用** ``` cookie和session结合使用: web 开发发展至今, cookie 和 session 的使用已经出现了一些 非常成熟的方案。在如今的市场或者企业里,一般有两种存储方式: 存储在服务端:通过 cookie 存储一个 session_id ,然后具体的数据则是保存 在 session 中。如果用户已经登录,则服务器会在 cookie 中保存一个 session_id ,下 次再次请求的时候,会把该 session_id 携带上来,服务器根 据 session_id 在 session 库中获取用户的 session 数据。就能知道该用户到底是谁,以 及之前保存的一些状态信息。这种专业术语叫做 server side session 。存储在服务器的 数据会更加的安全,不容易被窃取。但存储在服务器也有一定的弊端,就是会占用服务器 的资源,但现在服务器已经发展至今,一些 session 信息还是绰绰有余的。 将 session 数据加密,然后存储在 cookie 中。这种专业术语叫做 client side session 。 flask 采用的就是这种方式,但是也可以替换成其他形式 ``` ***2.FLlask 操作Cookie*** ``` cookies:在 Flask 中操作 cookie ,是通过 response 对象来操作,可以在 response 返回之 前,通过 response.set_cookie 来设置,这个方法有以下几个参数需要注意: key:设置的cookie的key。 value: key对应的value。 max_age:改cookie的过期时间,如果不设置,则浏览器关闭后就会自动过期。 expires:过期时间,应该是一个 datetime 类型。 domain:该cookie在哪个域名中有效。一般设置子域名,比如 cms.example.com 。 path:该cookie在哪个路径下有效  ``` 1.设置Cookie  ``` from flask import Flask,request,Response from flask import Blueprint loginUrl = Blueprint('login', __name__) @loginUrl.route('/api/v1', methods=['GET', 'POST', 'DELETE']) def loginRun():       resp = Response("小李哥运维")  #http响应       resp.set_cookie('username','breaklinux') #设置http cookie       return resp ```  2.验证浏览器写入Cookie 1.查看方法一 windows 打开浏览器访问路由 按F12 选择Network 查看访问请求 ![111.jpg](http://www.icode9.com/i/li/?n=2&i=images/20210615/1623689748754693.jpg?,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=) 2.查看方法2 3.查看方法3  (建议使用方法三查看准确性高) ![222.jpg](http://www.icode9.com/i/li/?n=2&i=images/20210615/1623689759776776.jpg?,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=) 2.删除Cookie  ``` @loginUrl.route('/del-cookie/', methods=['GET', 'POST', 'DELETE']) def delete_cookie():       resp = Response("删除小李哥运维Cookie")       resp.delete_cookie('username')        return resp ``` 3.设置cookie过期时间 方法1 ``` def loginRun():       resp = Response("小李哥运维设置cookie")       resp.set_cookie('username','breaklinux',max_age=60) #设置60秒后cookie过期       return resp 验证设置是否生效 ``` 方法2 ``` from datetime import datetime def loginRun(): resp = Response("小李哥运维设置cookie") expires = datetime(year=2021,month=12,day=11,hour=16,minute=0,second=0) #指定2021年12月12日凌晨0时0分0秒 #使用 expires参数,就必须使用格林尼治时间 #要相对北京时间少8小时 resp.set_cookie('username','breaklinux',expires=expires) #加8小时 东八时区 return resp 验证方法 ``` 距离现在时间 ``` from datetime import datetime,timedelta @loginUrl.route('/api/v1', methods=['GET', 'POST', 'DELETE']) def loginRun(): resp = Response("小李哥运维设置cookie") expires= datetime.now() + timedelta(days=30,hours=16) #距离现在的时间 #使用 expires参数,就必须使用格林尼治时间 #要相对北京时间少8小时 resp.set_cookie('username','breaklinux',expires=expires) #加8小时 东八时区 return resp ```
上一篇:SAP Spartacus 会使用 Session timeout 吗?


下一篇:Html静态页面更新,解决浏览器缓存不更新问题