会话如何运作?

DEV*_*OPS 28 php apache

任何机构都可以解释我在PHP中如何使用会话.例如.3位用户登录了gmail.服务器如何识别这3个用户.那背后的内部流程是什么?

Rus*_*ias 25

会话是服务器端会话数据客户端cookie的组合,客户端cookie只包含对服务器上正确数据的引用.因此,当用户访问该站点时,他们的浏览器将参考代码发送到服务器,该服务器加载相应的数据.

这可能看起来有点笨拙而不仅仅是拥有包含所有数据的客户端cookie,但是有一些优点:

  • 您的服务器端会话数据可以包含非常大量的数据,没有麻烦 - 客户端cookie的大小有限
  • 您的客户端cookie只包含一个小参考代码 - 因为每次有人访问您网站上的页面时都会传递此cookie,您通过不传输大型客户端Cookie来节省大量带宽
  • 会话数据更安全 - 只有您能够操作它,而不是所有人都可以编辑的客户端cookie

同样重要的是要注意,会话只会持续到用户关闭浏览器,而cookie可以配置为持续更长时间.但是,除了上述内容之外,在大多数情况下,会话数据和cookie数据之间没有太大区别.

以下是一篇非常好的文章,解释了会话和cookie如何在PHP中运行.


Jac*_*kin 22

会话由两个组件组成,即客户端会话ID服务器端会话数据.客户端可以将会话ID作为URL参数,cookie甚至HTTP标头发送到服务器.然后,服务器使用此会话ID查找要返回给客户端的相应会话数据.

您可以通过各种session_功能调整会话行为.


Vot*_*ple 10

会议非常简单.

当我登录到您的站点时,PHP将设置一个带有"会话ID"的标准浏览器cookie - 通常是一个字母数字字符串63f1a67cf52b5d2bbd0cbef45e18b242.

所有 cookie一样,我的浏览器会在每次发出请求时将该cookie发送回您的服务器.因此,您的应用程序现在知道会话ID 63f1a67cf52b5d2bbd0cbef45e18b242附带的每个请求都来自我.

因此,如果您需要存储有关我的任何信息,您可以跟踪它63f1a67cf52b5d2bbd0cbef45e18b242.默认情况下,PHP将此信息存储在/tmp/目录中的文件中,但您可以覆盖它并将其存储在任何您喜欢的位置(例如,在数据库中).重要的是将该会话ID与特定用户相关联.

我不想过分简化.有一些问题(比如,如果入侵者看到我未加密的会话ID并开始自己使用它会怎样 - 他可以想象会开始伪装成我),并且有一些方法可以缓解这些问题.但是,将会话ID存储在cookie中并使用它来识别存储在服务器上的有关我的信息的基本机制非常普遍.


ale*_*lex 5

我认为Gmail使用的是Python,而不是PHP.

默认情况下,PHP将其会话写入/tmp目录.它可以配置为将会话存储在数据库中.

它通过cookie识别会话,但也可以配置为传递查询字符串,但它非常难看.