【发布时间】:2014-05-28 21:38:56
【问题描述】:
我知道这个问题被问过很多次关于在 RESTful SPI 中使用 php 会话的问题,但答案通常是 php 会话在多个请求中保留状态,因此不是无状态的,因为我对这个说法有疑问,所以我想反驳它并得到好的答案:
如果我对 php 会话的理解正确,它们就是这样工作的:
- 当用户请求涉及会话处理的资源时 生成会话 ID 并提供给他。
- 用户有责任将此会话 ID 发送到服务器以处理任何后续请求,
这通常由用户代理通过 cookie 或附加会话 ID 参数来完成
到网址。
因此,服务器上不会保存任何应用程序状态信息,并且 php 会话是无状态的,因为会话 id 由客户端保存,而不是服务器。
当然,还有保存在服务器上的会话文件,因此是保留状态。但是在此会话文件上保存信息或将其保存在数据库中有什么区别?会话与否,一些数据保存在服务器上,其中一些(或全部)仅与某个用户或一组用户相关。
以国际象棋为例。假设所有游戏逻辑都在 php 文件中实现。士兵位置保存在表格中。玩家必须以某种方式识别以告诉服务器下一步要做什么。现在假设士兵位置保存在会话文件中。玩家要再次识别,这个场景和db表场景有什么不同吗?
编辑: 感谢您的好答案,他们提出了另一个问题:基于会话的应用程序(例如上一段中的国际象棋游戏)可以实现为 RESTful 服务吗?
【问题讨论】:
-
那么你的问题是在服务器文件和数据库表中存储会话值有什么区别吗?
-
如果你在会话数据中保存了士兵的位置,其他玩家怎么知道棋子在哪里?
-
实现方式不同,但我发现数据库样式会话更具弹性。 shiflett.org/articles/storing-sessions-in-a-database 并回答您最初的问题 - 会话在实践中 是无状态的。
-
@Pitchinnate,我的问题是这篇文章的标题:“php 会话是否是无状态的?”其余的只是为了清除我的地位。
-
@YekhezkelYovel 会话允许您在无状态环境中拥有状态。单个 http 请求是无状态的,但会话允许您在这些请求中拥有持久数据。
标签: php mysql rest session cookies