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

生产建设网站基坑开挖深度xampp上安装wordpress

生产建设网站基坑开挖深度,xampp上安装wordpress,国家建设部建筑业网站,双语网站建设报价flask中的session介绍 在Flask中#xff0c;session是一个用于存储特定用户会话数据的字典对象。它在不同请求之间保存数据。它通过在客户端设置一个签名的cookie#xff0c;将所有的会话数据存储在客户端。以下是如何在Flask应用中使用session的基本步骤#xff1a; 首先… flask中的session介绍 在Flask中session是一个用于存储特定用户会话数据的字典对象。它在不同请求之间保存数据。它通过在客户端设置一个签名的cookie将所有的会话数据存储在客户端。以下是如何在Flask应用中使用session的基本步骤 首先你需要设置一个秘钥这是为了加密你的session数据 from flask import Flask, sessionapp Flask(__name__)# Set the secret key to some random bytes. Keep this really secret! app.secret_key b_5#y2LF4Q8z\n\xec]/ 然后你可以像操作字典一样操作session对象。以下是一个登录的例子 from flask import Flask, session, redirect, url_for, escape, requestapp Flask(__name__) app.secret_key b_5#y2LF4Q8z\n\xec]/#from flask import escape # 假设 session[username] 是 scriptalert(hacked!);/script #safe_username escape(session[username]) # safe_username 现在是 lt;scriptgt;alert(hacked!);lt;/scriptgt; # escape(session[username])是在做HTML转义app.route(/) def index():if username in session:return Logged in as %s % escape(session[username])return You are not logged inapp.route(/login, methods[GET, POST]) def login():error Noneif request.method POST:username request.form[username]password request.form[password]if valid_login(username, password):session[username] request.form[username]return redirect(url_for(index))else:error Invalid username or passwordreturn render_template(login.html, errorerror)app.route(/logout) def logout():# remove the username from the session if its theresession.pop(username, None)return redirect(url_for(index)) Flask的session实现涉及到几个关键的组件session对象、session_interface对象以及secure_cookie模块。以下是这些组件是如何工作以实现Flask的session的 Session对象在Flask中session被表示为一个名为session的字典对象。它是LocalProxy的实例LocalProxy是一种可以动态引用当前运行环境比如请求或应用上下文的特定对象的代理类。当你尝试访问session对象的属性或方法时LocalProxy会将这些操作转发到实际的会话对象这个实际的会话对象由session_interface创建。SessionInterface对象SessionInterface是一个抽象基类定义了用于处理session的接口。Flask自带的SecureCookieSessionInterface实现了这个接口使用安全的签名cookie来存储session数据。当一个请求开始时SecureCookieSessionInterface会从请求的cookies中提取出session数据并创建一个新的SecureCookieSession对象。当请求结束时如果SecureCookieSession对象被修改SecureCookieSessionInterface会把它序列化并签名然后存回到客户端的cookies中。【文末附源码解释】SecureCookie模块这个模块实现了SecureCookieSession类SecureCookieSession是一个用于存储实际session数据的字典子类它的工作方式和普通的字典一样。 整体来看Flask的session实现工作流程是这样的 当一个请求开始时Flask会创建一个新的请求上下文并通过SecureCookieSessionInterface从请求的cookies中提取出session数据然后创建一个新的SecureCookieSession对象。当你在你的视图函数中操作session对象比如设置session[username] John时实际上你是在操作这个SecureCookieSession对象。当请求结束时Flask会检查SecureCookieSession对象是否被修改。如果被修改Flask会通过SecureCookieSessionInterface和SecureCookie将SecureCookieSession对象序列化并签名然后把它存回到响应的cookies中。当下一个请求来到时这个过程会再次重复。 通常流程总结 当一个新用户没有任何session数据的用户首次访问你的Flask应用时他们的请求中不会包含任何session数据。在这种情况下Flask会为这个用户创建一个新的、空的session对象。这个新的session对象在初始状态下是空的也就是说它不包含任何数据。如果在处理这个请求的过程中你的代码修改了session对象例如通过设置session[username] John那么当请求结束时Flask会把这个session对象序列化并签名然后存入一个新的Cookie中。这个新的Cookie会被发送到客户端一起与响应一起传送。当这个用户下次访问你的Flask应用时他们的请求将会携带这个包含了session数据的Cookie。Flask会在接收到这个请求时从Cookie中提取出session数据并创建一个新的session对象。这样你的代码就可以继续访问和修改这个session对象了。 需要注意的是如果一个请求没有修改session对象那么Flask就不会在响应中设置新的Cookie。这是因为没有必要把一个没有变化的session数据再次发送到客户端。 因此即使一个新用户的首次请求中没有包含任何session数据Flask也能正确地处理 SecureCookieSessionInterface class SecureCookieSessionInterface(SessionInterface):The default session interface that stores sessions in signed cookiesthrough the :mod:itsdangerous module.#: the salt that should be applied on top of the secret key for the#: signing of cookie based sessions.salt cookie-session#: the hash function to use for the signature. The default is sha1digest_method staticmethod(hashlib.sha1)#: the name of the itsdangerous supported key derivation. The default#: is hmac.key_derivation hmac#: A python serializer for the payload. The default is a compact#: JSON derived serializer with support for some extra Python types#: such as datetime objects or tuples.serializer session_json_serializersession_class SecureCookieSessiondef get_signing_serializer(self, app: Flask) - URLSafeTimedSerializer | None:if not app.secret_key:return Nonesigner_kwargs dict(key_derivationself.key_derivation, digest_methodself.digest_method)return URLSafeTimedSerializer(app.secret_key,saltself.salt,serializerself.serializer,signer_kwargssigner_kwargs,)def open_session(self, app: Flask, request: Request) - SecureCookieSession | None:s self.get_signing_serializer(app)if s is None:return Noneval request.cookies.get(self.get_cookie_name(app))if not val:return self.session_class()# 获取session的最大有效期单位为秒。max_age int(app.permanent_session_lifetime.total_seconds())try:# 尝试使用序列化器s的loads方法对session cookie的值val进行反序列化和签名验证。如果反序列化和验证成功就用这些数据创建一个新的session对象并返回data s.loads(val, max_agemax_age)return self.session_class(data)except BadSignature:return self.session_class()def save_session(self, app: Flask, session: SessionMixin, response: Response) - None:name self.get_cookie_name(app)domain self.get_cookie_domain(app)path self.get_cookie_path(app)secure self.get_cookie_secure(app)samesite self.get_cookie_samesite(app)httponly self.get_cookie_httponly(app)# Add a Vary: Cookie header if the session was accessed at all.if session.accessed:response.vary.add(Cookie)# If the session is modified to be empty, remove the cookie.# If the session is empty, return without setting the cookie.if not session:if session.modified:response.delete_cookie(name,domaindomain,pathpath,securesecure,samesitesamesite,httponlyhttponly,)response.vary.add(Cookie)returnif not self.should_set_cookie(app, session):returnexpires self.get_expiration_time(app, session)val self.get_signing_serializer(app).dumps(dict(session)) # type: ignoreresponse.set_cookie(name,val, # type: ignoreexpiresexpires,httponlyhttponly,domaindomain,pathpath,securesecure,samesitesamesite,)response.vary.add(Cookie) SecureCookieSessionInterface类这个类实现了session接口使用安全的签名cookies来存储session数据。类属性 salt加盐值用于混淆session的加密过程增加安全性。digest_method哈希函数用于签名过程中对数据进行哈希处理默认为sha1。key_derivation关键字派生设置为hmac表示使用HMAC进行签名。serializer序列化器用于将Python对象转换为可以在网络上传输的格式这里使用的是JSON序列化器。session_class表示session的类默认为SecureCookieSession。 get_signing_serializer方法用于获取一个签名序列化器其作用是用来签名和反签名cookies的。如果应用没有设置秘钥app.secret_key则返回None。open_session方法在处理每个请求时调用从请求的cookies中提取出session数据反序列化并验证签名得到session的数据。如果签名不合法就会抛出BadSignature异常然后返回一个空的session。save_session方法在每个请求处理完后调用将session数据序列化签名然后存入到响应的cookies中。如果session为空且已被修改则删除cookie。只有当session被访问过或被修改才会设置Vary: Cookie头。 在使用SecureCookieSessionInterface处理session时Flask会保证session的安全性即使session数据存储在客户端的cookies中也无法被篡改因为每个session cookie都被签名了。除非知道服务器的秘钥否则无法伪造有效的session cookie。
http://www.sadfv.cn/news/350508/

相关文章:

  • 更改网站备案负责人做任务打字赚钱的网站
  • 什么是网站建设的基础海外网站建站
  • 网站建设可以在家做吗网站运营团队建设
  • 在线表情包制作网站我的世界查找建筑网站
  • 岐山网站开发公众号开发运营
  • 潜山云建站网站建设百度推广代理查询
  • 网站架设方式手机网站悬浮广告代码
  • 关于服装店网站建设的策划方案商务网站创建经费预算
  • 视频网站的链接怎么做怎样制定一个网站建设方案
  • 大型网站制作报价南宁网站关键词推广
  • 做网站一万网站开发html
  • 做网站如何分页wordpress cm
  • 专门做各种产品测评的网站郑州粒米seo顾问
  • 如何在阿里云做网站asp.net网站 兼容
  • 厦门规划建设网站北京专业建设网站价格
  • 网站维护升级广州注册公司需要多少钱
  • seo优化能提高网站的流量吗西部数码网站助手教程
  • asp网站架设教程dede网站转移
  • php 多语言网站建设源码自助外贸英文网站建设
  • 阿里云淘宝客网站建设教程机关网站建设需求文档
  • 昆明网页建站模板小程序自助建站
  • 南宁网站推广经理金山石化网站建设
  • 网站和网店区别教育信息化建设网站
  • 西安手机网站定制网站建设西安住房和城乡建设局网站
  • 苏州做网站的手机动画制作app免费
  • 设计企业公司网站河南网站搭建
  • 重庆官方网站建设淄博网站开发公司
  • 网站调优技能设计网站页面教案
  • 毕节网站网站建设学院网站建设工作总结
  • 给朋友做的相册网站没有了大连开发区商场