【发布时间】:2011-09-13 11:33:20
【问题描述】:
我看到许多网站放弃使用 PHP 中的默认会话处理方法,而我仍然不知道为什么。
他们肯定在运行 PHP,而且在我看来,人们会设计自己的方法毫无意义。是否有某种我不知道的限制,或者纯粹是为了让他们控制一切?
(我试过问他们,是的,他们要么没有联系方式,要么在不知道实际情况的情况下“在某处看到了反对使用 PHP 会话的东西”)
【问题讨论】:
我看到许多网站放弃使用 PHP 中的默认会话处理方法,而我仍然不知道为什么。
他们肯定在运行 PHP,而且在我看来,人们会设计自己的方法毫无意义。是否有某种我不知道的限制,或者纯粹是为了让他们控制一切?
(我试过问他们,是的,他们要么没有联系方式,要么在不知道实际情况的情况下“在某处看到了反对使用 PHP 会话的东西”)
【问题讨论】:
默认会话存储在硬盘上,通常在 /tmp 目录中。 当您的网站变得更大时,一台计算机不足以运行它。 因此,人们求助于负载平衡(以及其他解决方案)。
负载平衡器有效地在一组计算机之间切换。因此,如果有任何机会在您的第一个请求中由计算机 #1 提供服务,然后在您的第二个请求中由计算机 #2 提供服务 - 第二台计算机无法读取会话,因为它不在其 /tmp 文件夹中。
这当然是一个简化的场景,因为应用程序的扩展还有很多,但这是人们求助于覆盖默认会话机制的原因之一。
另一件有趣的事情是将会话存储在数据库中,从而使它们可搜索,而其他东西则不可搜索。您还可以创建一个界面来有效地强制注销人员,这是默认机制无法提供的。
【讨论】:
我认为滚动您自己的会话处理功能的主要原因是为了测试。如果您正在运行单元测试,则不一定会有浏览器环境运行。您将无法设置 cookie,因此 PHP 不会为您设置 $_SESSION 变量。
但是,如果您编写了自己的会话处理类,那么您可以创建一个模拟类来运行单元测试。该对象的行为类似于“真实”会话,但您不必为浏览器、cookie 和人类而烦恼。
【讨论】:
使用标准设置,您可以使用文件系统、保存未加密的会话数据等。
使用session_set_save_handler 编写您自己的会话处理,您可以根据需要调整会话管理...应用加密、将会话保存在数据库中、将会话与单独的软件系统同步...
【讨论】:
1) Session 仍然被广泛使用。他们工作并完成工作,因此除非有特殊情况,否则没有必要更改它。
2) 但是,Session 很弱,它依赖于单个 PHP(可能被盗)。但是,可以使用 cookie + ip + 过期等不同的方法来保护会话。
所以是和不是。 Session 仍然被广泛使用,但需要微调。
【讨论】: