当前位置: 首页 > news >正文

爱站网新网址是多少wordpress更改了连接打不开

爱站网新网址是多少,wordpress更改了连接打不开,制作网站需要学什么,徐州免费网站建设模板Flask-Session使用Redis 一、介绍 在Flask中#xff0c;session数据默认是以加密的cookie形式存储在用户的浏览器中的。但是#xff0c;真正的session数据应该存储在服务器端。Django框架会将session数据存储在数据库的djangosession表中#xff0c;而Flask则可以通过第三…Flask-Session使用Redis 一、介绍 在Flask中session数据默认是以加密的cookie形式存储在用户的浏览器中的。但是真正的session数据应该存储在服务器端。Django框架会将session数据存储在数据库的djangosession表中而Flask则可以通过第三方库如flask-session来实现通常将session存储在Redis这样的内存数据库中。此外Flask也可以使用JWTJSON Web Tokens来处理session。 二、使用 1. 安装 要使用Flask的session功能首先需要安装flask-session库 pip install flask-session2.方式一 创建Redis连接并使用RedisSessionInterface来将session数据存储到Redis中。 通过session字典来存储和获取数据。 示例 from flask import Flask, session from flask_session.redis import RedisSessionInterface from redis import Redisapp Flask(__name__) # 创建一个 Flask 应用对象 app.debug True # 设置调试模式为开启 app.config[SESSION_COOKIE_NAME] hello_session # 设置会话 cookie 名称前端显示 conn_redis Redis(hostlocalhost, port6379) # 创建一个 Redis 连接对象连接本地 Redis 服务器# 设置应用的会话接口为基于 Redis 的会话 # app Flask 应用对象 # client Redis 客户端对象 # key_prefix 用于在数据库中存储会话的键名前缀 app.session_interface RedisSessionInterface(app, clientconn_redis, key_prefixbruce)app.route(/) def index(): # 定义路由处理函数session[serret] 123456 # 设置会话变量 serretreturn index # 返回字符串 indexif __name__ __main__:app.run()3.方式二 设置session的cookie名称和配置指定session类型为redis。 创建Redis连接对象并使用Session类来初始化Flask应用。 示例 from flask import Flask, session from flask_session import Session from redis import Redisapp Flask(__name__) app.session_cookie_name hello_session# 配置会话类型为redis并指定redis的主机和端口 app.config[SESSION_TYPE] redis app.config[SESSION_REDIS] Redis(host127.0.0.1, port6379)# 将会话配置应用到Flask应用程序中 Session(app)app.route(/) def index():session[secret] 123456return indexif __name__ __main__:app.run() 4.相关配置 # 设置会话的cookie名称 app.session_cookie_name hello_session# 配置会话类型为redis app.config[SESSION_TYPE] redis# Redis配置 app.config[SESSION_REDIS] Redis(host127.0.0.1, port6379) # Redis服务器的密码如果有 app.config[SESSION_REDIS_PASSWORD] password # Redis数据库索引 app.config[SESSION_REDIS_DB] 0 # 会话的过期时间默认是31天 app.config[PERMANENT_SESSION_LIFETIME] 3600 * 24 * 31# 是否对发送到浏览器端的cookie进行签名 app.config[SESSION_USE_SIGNER] True# 是否需要HTTPS传输cookie app.config[SESSION_COOKIE_SECURE] False# 设置cookie的httponly属性防止客户端脚本访问cookie app.config[SESSION_COOKIE_HTTPONLY] True# 设置cookie的SameSite属性防止CSRF攻击 app.config[SESSION_COOKIE_SAMESITE] Lax三、源码解析 使用Redis时使用的是RedisSessionInterface RedisSessionInterface继承ServerSideSessionInterface open_session def open_session(self, app, request):# 从cookie中获取会话IDsid request.cookies.get(app.config[SESSION_COOKIE_NAME])# 如果没有会话ID生成一个新的并返回if not sid:sid self._generate_sid(self.sid_length)return self.session_class(sidsid, permanentself.permanent)# 如果会话ID已经签名解除签名if self.use_signer:try:sid self._unsign(app, sid)except BadSignature:sid self._generate_sid(self.sid_length)return self.session_class(sidsid, permanentself.permanent)# 从数据库中检索会话数据store_id self._get_store_id(sid)saved_session_data self._retrieve_session_data(store_id)# 如果已保存会话存在从文档中加载会话数据if saved_session_data is not None:return self.session_class(saved_session_data, sidsid)# 如果已保存会话不存在创建一个新会话sid self._generate_sid(self.sid_length)return self.session_class(sidsid, permanentself.permanent)save_session def save_session(self, app, session, response):domain self.get_cookie_domain(app) # 获取cookie的域path self.get_cookie_path(app) # 获取cookie的路径name self.get_cookie_name(app) # 获取cookie的名称store_id self._get_store_id(session.sid) # 获取存储IDif session.accessed: # 如果会话已访问response.vary.add(Cookie) # 响应头中添加Vary信息if not session: # 如果会话不存在if session.modified: # 如果会话已修改self._delete_session(store_id) # 删除会话response.delete_cookie(keyname, domaindomain, pathpath) # 从响应中删除cookieresponse.vary.add(Cookie) # 响应头中添加Vary信息return # 返回if not self.should_set_storage(app, session): # 如果不应该设置存储return # 返回self._upsert_session(app.permanent_session_lifetime, session, store_id) # 更新或插入会话if not self.should_set_cookie(app, session): # 如果不应该设置cookiereturn # 返回# 获取额外的所需cookie设置value self._sign(app, session.sid) if self.use_signer else session.sid # 获取cookie的值expires self.get_expiration_time(app, session) # 获取cookie的过期时间httponly self.get_cookie_httponly(app) # 获取cookie的httponly设置secure self.get_cookie_secure(app) # 获取cookie的安全设置samesite (self.get_cookie_samesite(app) if self.has_same_site_capability else None) # 获取相同站点设置如果支持response.set_cookie(keyname,valuevalue,expiresexpires,httponlyhttponly,domaindomain,pathpath,securesecure,samesitesamesite,) # 在响应中设置cookieresponse.vary.add(Cookie) # 响应头中添加Vary信息
http://www.w-s-a.com/news/196/

相关文章:

  • 视频公司的网站设计工图网
  • 免费快速网站十八个免费的舆情网站