php会话是否是无状态的?
我知道,关于在RESTful SPI中使用php会话,这个问题被问了很多次,但答案通常是php会话在多个请求中保持状态,因此不是无状态的,因为我对这一说法有疑问,我想反驳它并得到好的答案: 如果我对php会话理解正确,那么它们就是这样工作的:php会话是否是无状态的?,php,mysql,rest,session,cookies,Php,Mysql,Rest,Session,Cookies,我知道,关于在RESTful SPI中使用php会话,这个问题被问了很多次,但答案通常是php会话在多个请求中保持状态,因此不是无状态的,因为我对这一说法有疑问,我想反驳它并得到好的答案: 如果我对php会话理解正确,那么它们就是这样工作的: 当用户请求涉及会话处理的资源时 生成会话id并提供给他 用户负责将此会话id发送到服务器,以便进行任何后续请求, 这通常由用户代理通过cookie或附加会话id参数来完成 链接到url 因此,服务器上永远不会保存任何应用程序状态信息,php会话是无状态
- 当用户请求涉及会话处理的资源时 生成会话id并提供给他
- 用户负责将此会话id发送到服务器,以便进行任何后续请求,
这通常由用户代理通过cookie或附加会话id参数来完成
链接到url
感谢这些好的答案,它们引出了另一个问题:基于会话的应用程序(如上一段中的国际象棋)能否作为RESTful服务实现?您缺少了存储树的小实现细节的大森林图 建立会话的行为意味着服务器有一个状态。该状态存储的位置无关紧要。会话可能超时这一事实意味着存在状态。只有当我可以随时重复相同的请求并始终收到相同的答案时,API才是无状态的。如果在发送请求之前必须与服务器建立会话,并且该会话仍然需要处于活动状态,或者请求可能被拒绝,则我不能在任何时候发送请求,而只能在存在活动会话时发送,因此服务器不是无状态的
现在,如果会话对请求没有任何影响,客户端是否跟踪会话cookie也无关紧要,并且无论会话状态如何,请求都会得到响应,那么这将是一个无状态服务器。这是一个毫无意义的会话。对于存储树的小实现细节,您错过了大的森林图 建立会话的行为意味着服务器有一个状态。该状态存储的位置无关紧要。会话可能超时这一事实意味着存在状态。只有当我可以随时重复相同的请求并始终收到相同的答案时,API才是无状态的。如果在发送请求之前必须与服务器建立会话,并且该会话仍然需要处于活动状态,或者请求可能被拒绝,则我不能在任何时候发送请求,而只能在存在活动会话时发送,因此服务器不是无状态的
现在,如果会话对请求没有任何影响,客户端是否跟踪会话cookie也无关紧要,并且无论会话状态如何,请求都会得到响应,那么这将是一个无状态服务器。而且是一个毫无意义的会话。只要服务器上没有保存应用程序信息,这是错误的。会话数据保存在服务器上。客户端机器上保存的唯一内容是会话cookie
您可以判断某些内容是否是无状态的,因为您将无法返回到上一步(每个步骤都被视为独立事务)。对于会话,这正是它们允许您执行的操作。例如,如果您在电子商务网站的购物车中有商品,您可以关闭机器,稍后再回来,并在购物车中查看这些商品。这就是状态保存。只要服务器上没有保存应用程序信息,这就是错误的。会话数据保存在服务器上。客户端机器上保存的唯一内容是会话cookie
您可以判断某些内容是否是无状态的,因为您将无法返回到上一步(每个步骤都被视为独立事务)。对于会话,这正是它们允许您执行的操作。例如,如果您在电子商务网站的购物车中有商品,您可以关闭机器,稍后再回来,并在购物车中查看这些商品。这就是状态保存。那么你的问题是,在服务器文件和数据库表中存储会话值有什么区别吗?如果你在会话数据中保存了士兵的位置,其他玩家如何知道碎片在哪里?实现方式不同,但我发现数据库样式的会话更具弹性。为了回答您最初的问题-会话实际上是无状态的。@首先,我的问题是这篇文章的标题:“php会话是否是无状态的?”其余的只是为了澄清我的立场。@YekhezkelYovel会话允许您在无状态环境中拥有一种状态。单独的http请求是无状态的,但是会话允许您在这些请求之间拥有持久数据。那么您的问题是,在服务器文件和数据库表中存储会话值有什么区别吗?如果您在会话数据中保存士兵位置,另一个玩家怎么知道这些部分在哪里呢?实现是不同的,但我发现数据库风格的会话更具弹性。为了回答你最初的问题,会话实际上是无状态的