it初学者做网站,wordpress修改底部文字,百度手机助手安卓版下载,做个app文章目录一、cookie1.1 什么是cookie#xff1f;1.2 使用cookie1.2.1 设置cookie1.2.2设置cookie的有效期1.2.3在Flask中查询cookie1.2.4删除cookie二、session2.1实现session的两种思路2.1.1 第一种2.1.2 第二种2.2使用session2.2 .1设置session2.2.2 设置有效期2.2.3 获取se…
文章目录一、cookie1.1 什么是cookie1.2 使用cookie1.2.1 设置cookie1.2.2设置cookie的有效期1.2.3在Flask中查询cookie1.2.4删除cookie二、session2.1实现session的两种思路2.1.1 第一种2.1.2 第二种2.2使用session2.2 .1设置session2.2.2 设置有效期2.2.3 获取session2.2.4删除session一、cookie
1.1 什么是cookie 一般web通信是基于HTTP的HTTP是无状态的协议也就是说在一次请求响应结束后服务器不会留下任何有关于对方状态信息所以需要保持web浏览器的状态。 比如对于有些web应用来说客户端的某些信息必须被记住。比如用户登录过后跳转页面依然要保持登录的状态进行其他的业务访问而当这个登录过的用户再次访问web服务器的时候web服务器并不知道这个用户已经登录过了所以无法进行其他需要权限的业务访问。所以cookie技术的出现就是为了解决这个问题。 web通讯一般基于HTTP协议HTTP是无状态协议Cookie技术是用来保持web访问状态Cookie技术通过在请求和响应报文中添加Cookie数据来保存客户端的状态信息。服务器可以设置cookie的有效期浏览器会自动清除过期的cookie。cookie有域名的概念只有访问同一个域名才会把之前相同域名返回的cookie携带给该服务器。
1.2 使用cookie
1.2.1 设置cookie 设置cookie的时候是由我们web服务器设置也就是在Flask项目中生成cookie经由响应报文返回给浏览器保存cookie下次浏览器再访问web服务器的时会在请求报文中把cookie携带过来所以cookie产生的起点是在web服务器中也就是我们的Flask项目中。 在Flask中如果想要在响应中添加一个cookie最方便的做法是使用内置的Response类提供的set_cookie()方法。 set_cookie()方法的参数
属性说明keycookie的键名称valuecookie的值max_agecookie被保存的时间数单位为秒。expires具体的过期时间一个datetime对象或UNIX时间戳path限制cookie只在给定的路径可用默认为整个域名下路径都可用domain设置cookie可用的域名默认是当前域名子域名需要利用通配符domain.当前域名secure如果设为True只有通过HTTPS才可以用httponly如果设为True进制客户端JavaScript获取cookie
项目目录
│ app.py
│
├─static # 文件夹
└─templates # 文件夹
app.py
from flask import Flask, Responseapp Flask(__name__)app.route(/)
def hello_world():resp Response(设置cookie给浏览器)resp.set_cookie(user_name, yudengwu)return respif __name__ __main__:app.run()
解读 app.py (1) 首先导入Flask内置的Response类用于在响应报文中设置cookie
from flask import Flask,request, Response
(2) 在视图函数实例化Response类并传入返回的内容Response类实例化出的对象调用set_cookie()方 法set_cookie内的第一个参数是设置cookie的key第二个参数是用来设置cookie的value然后返回该对象就会携带着设置好的cookie返回给浏览器保存。
app Flask(__name__)
app.route(/)
def hello_world():resp Response(设置cookie给浏览器)resp.set_cookie(user_name, yudengwu)return resp在浏览器中查看cookie的三种方式以Chrome浏览器为例 第一种: 右键检查-----Network----找到访问的域名----找到Response Headers----Set-Cookie 第二种点击url输入框左边的信息icon然后找到响应的域名展开查看cookie。 第三种设置----内容设置----Cookie----查看所有cookie设置-----根据域名搜索对应的cookie信息
1.2.2设置cookie的有效期
注意Flask服务器默认设置cookie有效期为关闭浏览器后cookie失效
基于max_age参数设置cookie有效期 再设置cookie的调用set_cookie()时候传入关键字实参max_age 值这个值代表多少秒后过期
from flask import Flask, Responseapp Flask(__name__)app.route(/)
def hello_world():resp Response(设置cookie给浏览器)resp.set_cookie(user_name, yudengwu,max_age600)return respif __name__ __main__:app.run() 基于expires参数设置cookie有效期 再设置cookie的调用set_cookie()时候传入关键字实参 expires 值这个值代具体的过期时间一个datetime对象或UNIX时间戳。 使用expires参数就必须会用格林尼治时间也就是相对北京时间少8个小时因为浏览器会默认把服务器传来的时间值当做标准格林尼治时间并根据当地的时区做调整 。
from flask import Flask, Response
import datetime
import time
app Flask(__name__)app.route(/)
def hello_world():resp Response(设置cookie给浏览器, cookie设置过期时间为一个月后)expires datetime.datetime.now() datetime.timedelta(days30, hours16)resp.set_cookie(user_name, mark, expiresexpires)return respif __name__ __main__:app.run() 1.2.3在Flask中查询cookie 查询cookie 是通过请求对象的cookies属性读取读取的过程是使用设置cookie时的key来读取到设置cookie的value
from flask import Flask, Response,request
import datetime
import time
app Flask(__name__)app.route(/)
def hello_world():resp Response(设置cookie给浏览器)resp.set_cookie(user_name, yudengwu, max_age600)return respapp.route(/get_cookie/)
def get_cookie():user_name request.cookies.get(user_name)if user_name yudengwu:return {}的信息.format(user_name)return cookie验证失败if __name__ __main__:app.run() 1.2.4删除cookie 删除cookie是通过Flask内置的Response类实例化出的对象调用delete_cookie(‘key’)删除的过程是使用设置cookie时的key来删除cookie信息。
from flask import Flask, Response,request
import datetime
import time
app Flask(__name__)app.route(/)
def hello_world():resp Response(设置cookie给浏览器)resp.set_cookie(user_name, yudengwu, max_age600)return respapp.route(/get_cookie/)
def get_cookie():user_name request.cookies.get(user_name)if user_name yudengwu:return {}的信息.format(user_name)return cookie验证失败app.route(/del/)
def del_cookie():resp Response(删除cookie)resp.delete_cookie(user_name)return respif __name__ __main__:app.run() 二、session sessionsession和cookie的作用有点类似都是为了存储用户相关的数据。不同的是cookie存储在本地浏览器而session存储在服务器。存储在服务器的数据会更加的安全不容易被窃取。但是存储在服务器上会占用服务器资源。与cookie不同的是session是一个思路一个概念一个服务器存储授权信息的解决方案。不同的服务器不同的框架不同的语言有不同的实现。虽然实现方案不一样但是他们的目的都是服务器为了方便存储数据的。session的出现是为了解决cookie存储信息不安全的问题。 session还可以存储到客户端。客户端发送验证信息之后服务器把相关的验证信息进行加密然后将加密后的数据存储到cookie中返回给浏览器以后浏览器在请求服务器的时候会自动将机密的session信息发送给服务端。服务端对数据进行解密之后在进行验证。flask中使用的就是这种机制。
2.1实现session的两种思路
2.1.1 第一种
客户端携带用户信息请求服务端验证。服务端验证成功后生成随机的session_id与用户信息建立映射后存储到数据库中注意数据库可以是任意永久化保存数据的机制如redis、memcached、mysql、甚至是文件等等。服务端把刚刚生成的session_id作为cookie信息返回给客户端。客户端收到以session_id为内容的cookie信息保存到本地。客户端再次请求的时候会携带以session_id为内容的cookie去访问服务端服务端取出session_id去数据库校验得到用户信息。
2.1.2 第二种
客户端携带用户信息请求服务端验证。服务端收到用户信息验证成功后服务端再把用户信息经过严格的加密加盐生成session信息。并且把刚刚生成的session信息作为cookie的内容返回给客户端。客户端收到以session信息为内容的cookie保存到本地。客户端再次请求的时候会携带以session信息为内容的cookie去访问服务端服务端取出session信息经过解密得到用户的信息。 注意flask使用的就是第二种思路利用加密解密的方式实现session实现安全的cookie服务端并不会做永久化的储存。
2.2使用session
2.2 .1设置session Flask提供了session对象用来将cookie加密储存session通过秘钥对数据进行签名以加密数据。
from flask import Flask, session,Response
import osapp Flask(__name__)
app.config[SECRET_KEY] os.urandom(24) # 配置session使用的秘钥app.route(/)
def set_session_info():resp Response(前端)session[username] marksession[userphone] 123456 # 可以指定多条session信息统一放到响应的cookie中返回给浏览器return respif __name__ __main__:app.run()2.2.2 设置有效期 后端Flask跟浏览器交互默认情况下session cookie会在用户关闭浏览器时清除。通过将session.permanent属性设为True可以将session的有效期延长为31天也可以通过操作app的配置PERMANENT_SESSION_LIFETIME来设置session过期时间。
from flask import Flask, session,Response
import osapp Flask(__name__)
app.config[SECRET_KEY] os.urandom(24) # 配置session使用的秘钥app.route(/)
def set_session_info():resp Response(前端)session[username] yudengwusession[userphone] yudengwu # 可以指定多条session信息统一放到响应的cookie中返回给浏览器session.permanent True # 开启设置有效期默认为31天后过期return respif __name__ __main__:app.run()通过设置PERMANENT_SESSION_LIFETIME指定具体的过期时间
from flask import Flask, session,Response
import os
from datetime import timedelta
app Flask(__name__)
app.config[SECRET_KEY] os.urandom(24) # 配置session使用的秘钥app.route(/)
def set_session_info():resp Response(前端)session[username] yudengwusession[userphone] yudengwu # 可以指定多条session信息统一放到响应的cookie中返回给浏览器#以下两步设置过期时间session.permanent True #必须要有app.permanent_session_lifetime timedelta(minutes10)return respif __name__ __main__:app.run() 2.2.3 获取session 在Flask中获取设置的session信息通过session对象获取session对象是继承了字典类所以获取的时候是字典的取值方式。其内部会把浏览器传过来的session信息解密。
from flask import Flask, session,Response
import osapp Flask(__name__)
app.config[SECRET_KEY] os.urandom(24) # 配置session使用的秘钥app.route(/)
def set_session_info():resp Response(前端)session[username] yudengwusession[userphone] yudengwu # 可以指定多条session信息统一放到响应的cookie中返回给浏览器return respapp.route(/get_session/)
def get_session():username session.get(username)userphone session.get(userphone)if username or userphone:return {},{}.format(username, userphone)return session为空if __name__ __main__:app.run()2.2.4删除session nbspsession对象调用pop()可以根据具体的session的key清除掉指定的session信息。 nbspsession对象调用clear()可以清除此次请求的浏览器关于本域名的所有session信息
from flask import Flask, session,Response
import os
from datetime import timedelta
app Flask(__name__)
app.config[SECRET_KEY] os.urandom(24) # 配置session使用的秘钥app.route(/)
def set_session_info():resp Response(前端)session[username] yudengwusession[userphone] yudengwu # 可以指定多条session信息统一放到响应的cookie中返回给浏览器#以下两步设置过期时间session.permanent Trueapp.permanent_session_lifetime timedelta(minutes10)return respapp.route(/get_session/)
def get_session():username session.get(username)userphone session.get(userphone)if username or userphone:return {},{}.format(username, userphone)return session为空app.route(/del_session/)
def del_session():session.pop(username)# session.clear()return 删除成功if __name__ __main__:app.run()