浅谈 PHP Yaf 开启session之后对响应头的影响

  当使用PHP Yaf框架,如果某个 Action 在返回响应(输出页面或者返回json)之前,启用了session,那么将会在响应头里面加上强制不缓存的响应头,也就是如下的三个响应头。
  
  Expires: Thu, 19 Nov 1981 08:52:00 GMT
  
  Cache-Control: no-store, no-cache, must-revalidate
  
  Pragma: no-cache
  
  测试代码
  
  class IndexController extends Yaf_Controller_Abstract {
  
  // 带有session
  
  public function sessionAction() {
  
  $sessionInstance = \Yaf_Session::getInstance();
  
  $this->getView()->assign("content", "Hello World");
  
  $this->display("index");
  
  return false;
  
  }
  
  // 没有session
  
  public function noSessionAction() {
  
  $this->getView()->assign(www.fengshen157.com"content", "Hello World");
  
  $this->display("index");
  
  return false;
  
  }
  
  }
  
  启用session的请求响应
  
  $ curl -si http://127.0.0.1/index/session
  
  HTTP/1.1 200 OK
  
  Server: openresty/1.11.2.5
  
  Date: Wed, 20 Feb 2019 02:54:47 GMT
  
  Content-Type: text/html; charset=UTF-8
  
  Transfer-Encoding: chunked
  
  Connection: keep-alive
  
  X-Powered-By: PHP/7.0.25
  
  Set-Cookie: PHPSESSID=lf72vsbla12b2431evhp9mq7l6; path=/
  
  Expires: Thu, 19 Nov 1981 08:52:00 GMT
  
  Cache-Control: no-store,www.078881.cn no-cache, must-revalidate
  
  Pragma: no-cache
  
  <html>
  
  <head>
  
  <title>Hello World<www.tianshengyuLe1.cn /title>
  
  </head>
  
  <body>
  
  Hello World </body>
  
  </html>
  
  未启用session的请求响应
  
  $ curl -si http://127.0.0.1/index/nosession
  
  HTTP/1.1 200 OK
  
  Server: openresty/1.11.2.5
  
  Date: Wed, 20 Feb 2019 02:54:40 GMT
  
  Content-Type: text/html;www.yinxionghui1.com charset=UTF-8
  
  Transfer-Encoding: chunked
  
  Connection: keep-alive
  
  X-Powered-By: PHP/7.0.25
  
  <html>
  
  <head>
  
  <title>Hello World</title>
  
  </head>
  
  <body>
  
  Hello World </body>
  
  </html>
  
  整个框架以C API为界,分为前端和后端两大部分。
  
  前端:提供编程模型,多语言的接口支持,比如Python Java C++等。通过C API建立前后端的连接,后面详细讲解。
  
  后端:提供运行环境,完成计算图的执行。进一步分为4层
  
  运行时:分为分布式运行时和本地运行时,负责计算图的接收,构造,编排等。
  
  计算层:提供各op算子的内核实现,例如conv2d, relu等
  
  通信层:实现组件间数据通信,基于GRPC和RDMA两种通信方式
  
  设备层:提供多种异构设备的支持,如CPU GPU TPU FPGA等
  
  模型构造和执行流程
  
  TensorFlow的一大特点是,图的构造和执行相分离。用户添加完算子,构建好整图后,才开始进行训练和执行,也就是图的执行。大体流程如下
  
  图构建:用户在client中基于TensorFlow的多语言编程接口,添加算子,完成计算图的构造。
  
  图传递:client开启session,通过它建立和master之间的连接。执行session.run()时,将构造好的graph序列化为graphDef后,以protobuf的格式传递给master。
  
  图剪枝:master根据session.run()传递的fetches和feeds列表,反向遍历全图full graph,实施剪枝,得到最小依赖子图
  
  图分裂:master将最小子图分裂为多个Graph Partition,并注册到多个worker上。一个worker对应一个Graph Partition。
  
  图二次分裂:worker根据当前可用硬件资源,如CPU GPU,将Graph Partition按照op算子设备约束规范(例如tf.device(‘/cpu:0‘),二次分裂到不同设备上。每个计算设备对应一个Graph Partition。
  
  图运行:对于每一个计算设备,worker依照op在kernel中的实现,完成op的运算。设备间数据通信可以使用send/recv节点,而worker间通信,则使用GRPC或RDMA协议。
  
  3 前端多语言实现 - swig包装器
  
  TensorFlow提供了很多种语言的前端接口,使得用户可以通过多种语言来完成模型的训练和推断。其中Python支持得最好。这也是TensorFlow之所以受欢迎的一大原因。前端多语言是怎么实现的呢?这要归功于swig包装器。
  
  swig是个帮助使用C或者C++编写的软件能与其它各种高级编程语言进行嵌入联接的开发工具。在TensorFlow使用bazel编译时,swig会生成两个wrapper文件
  
  pywrap_tensorflow_internal.py:对接上层Python调用
  
  pywrap_tensorflow_internal.cc:对接底层C API调用。
  
  pywrap_tensorflow_internal.py 模块被导入时,会加载_pywrap_tensorflow_internal.so动态链接库,它里面包含了所有运行时接口的符号。而pywrap_tensorflow_internal.cc中,则注册了一个函数符号表,实现Python接口和C接口的映射。运行时,就可以通过映射表,找到Python接口在C层的实现了。
  
  4 tensorflow 源码结构
  
  TensorFlow源码基本也是按照框架分层来组织文件的。如下
  
  其中core为tf的核心,它的源码结构如下
  
  5 总结
  
  TensorFlow框架设计精巧,代码量也很大,我们可以从以下部分逐步学习
  
  TensorFlow内核架构和源码结构。先从全局上对框架进行理解。
  
  前后端连接的桥梁--Session,重点理解session的生命周期,并通过相关源码可以加深理解Python前端如何调用底层C实现。
  
  TensorFlow核心对象—Graph。图graph是TensorFlow最核心的对象,基本都是围绕着它来进行的。graph的节点为算子operation,边为数据tensor。
  
  TensorFlow图的节点 -- Operation。operation是图graph的节点,承载了计算算子。
  
  TensorFlow图的边 -- Tensor。Tensor是图graph的边,承载了计算的数据。
  
  TensorFlow本地运行时。
  
  TensorFlow分布式运行时。和本地运行时有一些共用的接口,但区别也很大。
  
  TensorFlow设备层。主要了解设备层的定义规范,以及实现。
  
  TensorFlow队列和并行运算。
  
  TensorFlow断点检查checkpoint,模型保存Saver,以及可视化tensorboard。这三个为TensorFlow主要的工具。

原文地址:https://www.cnblogs.com/qwangxiao/p/10405392.html

时间: 2024-10-04 01:28:03

浅谈 PHP Yaf 开启session之后对响应头的影响的相关文章

浅谈Session的使用(原创)

目录 浅谈Session的使用(原创) 1.引言 2.Session域的生命周期 2.1 Session的创建 2.2 Session的销毁 3.那么,session被销毁后,其中存放的属性不就都访问不到了吗,有何良策? 3.1 Cookie与session的相伴相生 3.2 Session活化钝化自力更生 最后 浅谈Session的使用(原创) 1.引言 ? 在java中Session域对象能将数据存储在服务器端,它可以存放各种类别的数据,相比只能存储字符串的cookie,能给开发人员存储数据

浅谈 Cookie 与 Session 的区别

1.cookie机制 Cookies是服务器在本地机器上存储的小段文本并随每一个请求发送至同一个服务器.IETF RFC 2965 HTTP State Management Mechanism 是通用cookie规范.网络服务器用HTTP头向客户端发送cookies,在客户终端,浏览器解析这些cookies并将它们保存为一个本地文件,它会自动将同一服务器的任何请求附上这些cookies . 具体来说cookie机制采用的是在客户端保持会话状态的方案.它是在用户端的会话状态的存贮机制,他需要用户

ASP.NET中Session的个人浅谈

看到博客园的一个哥们写的面试经历,想到了面试中常问到的Session,一时手痒就谈下自己对Session的理解,这东西最开始在用户登录登出的时候用到过,后来一直没怎么用过,里面还是有很多知识点值得注意的.先简单的说下吧,Session是分为客户端Session和服务端Session: 客户端Session Session称为会话状态,是Web系统中最常用的状态,用于维护和当前浏览器实例相关的一些信息,当用户首次与Web服务器建立连接的时候,服务器会给当前访问用户分发一个 SessionID作为标

浅谈IM软件业务知识—会话session的概念,附一张IM软件的层次图

session一般出现在计算机领域,IM软件中的session,老的IM有两层:首先是逻辑层的session来管理会话的参与者,消息列表,会话类型等等:还有协议层的session,主要是代表客户端跟服务器的一个事物通道. 老的IM软件 客户端跟Server交互的每一类操作都是基于会话.比如客户端登录,需要建立一个登录的会话:客户端发消息,需要建立一个会话.下面举例: 客户端向Server发了一条消息,这条消息的发送就建立在会话之上.客户端需要下面几个步骤. 1. 创建一个session ID=1

浅谈php web安全

首先,笔记不是web安全的专家,所以这不是web安全方面专家级文章,而是学习笔记.细心总结文章,里面有些是我们phper不易发现或者说不重视的东西.所以笔者写下来方便以后查阅.在大公司肯定有专门的web安全测试员,安全方面不是phper考虑的范围.但是作为一个phper对于安全知识是:“知道有这么一回事,编程时自然有所注意”. 概要: 1.php一些安全配置 (1)关闭php提示错误功能 (2)关闭一些“坏功能” (3)严格配置文件权限. 2.严格的数据验证,你的用户不全是“好”人 2.1为了确

浅谈Hibernate--入门篇

Hibernate是什么 Hibernate是一个轻量级的ORMapping框架 ORMapping原理(Object Relational Mapping)就是把对象里面的数据和数据库里面的数据,按照一定的规则进行映射的过程. ORMapping基本对应规则: 1:类跟表相对应 2:类的属性跟表的字段相对应 3:类的实例与表中具体的一条记录相对应 Hibernate的实现方式 Hibernate解决的问题: 通过上图我们也能发现,Hibernate主要用来实现Java对象和表之间的映射,除此之

[nRF51822] 14、浅谈蓝牙低功耗(BLE)的几种常见的应用场景及架构(科普类干货)

蓝牙在短距离无线通信领域占据举足轻重的地位—— 从手机.平板.PC到车载设备, 到耳机.游戏手柄.音响.电视, 再到手环.电子秤.智能医疗器械(血糖仪.数字血压计.血气计.数字脉搏/心率监视器.数字体温计.耳温枪.皮肤水分计等), 再到智能家居等领域均占有一席之地. 而蓝牙低功耗(BLE)是在蓝牙4.0协议上修改以适用低功耗应用场景的一种蓝牙协议. 随着上一股智能消费类电子大潮的到来,BLE的各种应用也像雨后春笋般在市场上铺开. 如果想 紧跟蓝牙协议的最新动态 ,可以在https://www.b

【转】浅谈Nginx负载均衡与F5的区别

前言 笔者最近在负责某集团网站时,同时用到了Nginx与F5,如图所示,负载均衡器F5作为处理外界请求的第一道"墙",将请求分发到web服务器后,web服务器上的Nginx再进行处理,静态内容直接访问本地门户,动态数据则通过反向代理指向内网服务. 其实Nginx和F5这两者均可用作网站负载均衡,那二者有什么区别呢?笔者在此浅谈下Nginx与F5的一些区别. 目前很多网站或应用在设计之初都会为高并发的数据请求做负载均衡,不差钱的土豪用户一般会直接买F5硬件设备作为其负载均衡器,原因不用多

浅谈mysql主从复制的高可用解决方案

1.熟悉几个组件(部分摘自网络)1.1.drbd     —— DRBD(Distributed Replicated Block Device),DRBD号称是 "网络 RAID",开源软件,由 LINBIT 公司开发.DRBD 实际上是一种块设备的实现,主要被用于Linux平台下的高可用(HA)方案之中.他是有内核 模块和相关程序而组成,通过网络通信来同步镜像整个设备,有点类似于一个网络RAID的功能.也就是说当你将数据写入本地的DRBD设备上的文件系统 时, 数据会同时被发送到网