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