我正在编写一个WordPress插件来处理第三方API。
此API需要向其传递会话标识符,以便API(基本上起到第三方购物车的作用)知道要在何处添加哪些项目-同样,请将其视为购物车。
我想在WordPress用户的会话中存储此会话标识符。想法是连接到此API,请求会话标识符,然后将其存储在WordPress/PHP会话中,这样我就可以在他们浏览站点并向第三方购物车添加更多项目时重用它。我认识到这并不理想(为什么不直接使用WooCommerce呢?)但我们需要一些只有第三方才能提供的附加功能和数据。
不管怎样,当我尝试这样做时,我从我们的主持人那里找到了:https://wpengine.com/support/cookies-and-php-sessions/
我承认我感到非常困惑。
因此,PHP会话和函数session_start()
和session_id()
不建议使用,并且无法在此主机上运行-。。。我们的系统专门忽略定义PHPSESSID cookie的头
但正如那里的文件所指出的那样——IF PHP SESSIONS ARE A TYPE OF COOKIE, WHAT’S THE PROBLEM?
在我看来,这些医生并没有回答这个问题。
上面写着:
使用PHP会话时最大的冲突与唯一的会话标识符有关。因为每个用户的标识字符串都是唯一的,所以每个访问您站点的新用户都会使用此“busts cache”。这种系统不会与许多并发站点用户一起扩展!考虑到这一点,我们的系统专门忽略定义PHPSESSID cookie的头。
我的问题是,他们所倡导的会话不是这样吗?这些会话仅仅是通过一个不同的cookie来完成的,然后通过cookie连接到数据库?
他们说:
事实是,有一种更好的方法来存储用户会话数据!正确的方法是使用数据库存储会话数据。WooCommerce和其他电子商务解决方案已经转换为在传统PHP会话上使用此方法,并且还使用自己的cookie命名约定
这些文档继续:
除了性能和扩展方面的影响之外,PHP会话还存在其他问题。默认情况下,PHP会话将数据作为自己的唯一文件存储到文件系统中。将数据写入文件是一个I/O过程,如果您的站点有太多并发用户,这类过程会备份并导致高服务器负载。更不用说,如果您的站点位于跨多个web服务器的群集解决方案上,这种会话存储根本不起作用。
为什么这比将会话存储在数据库中更糟糕/更好?这不也是I/O吗?
我试图理解——为什么默认的PHP会话被认为是不好的,而WooCommerce会话被认为是好的?我已经调查了WooCommerce source code on sessions, 但我在这方面经验不足,无法解释为什么他们所做的可以避免主机文档中提到的漏洞。
具体而言:
围绕PHP会话存在多个安全漏洞。漏洞包括暴露会话数据、会话固定和会话劫持。
WooCommerce如何在PHP会话没有的情况下缓解这种情况?对于我的用例,什么是可取的?
显然,我不想要不安全的会话,但开发会话管理器/cookie/数据库连接,就像Woo所做的那样,需要一些时间。因此,在我投入时间避免PHP会话之前,我试图理解为什么/是否有必要进行复制。
SO网友:Mark Kaplun
这与wordpress关系不大,但如果这个答案有助于消除会话的使用,那么它可能是值得的。。。。
会话存储在服务器的硬盘上。这在共享托管场景中是有问题的,因为会话目录很可能由服务器上运行的所有进程都可读写,而不仅仅是您的站点。共享托管服务器上没有基于操作系统级别的用户保护(如目录权限)的所有共享资源至少是可疑的,您不应该将其用于任何安全或私有的用途。
让我们重复Sessions are stored on the hard disk of the server. 如果在多服务器环境中运行,会发生什么情况?您将如何定位会话信息。让它工作的唯一方法是将用户绑定到特定的服务器,这不是最佳的。
又一次Sessions are stored on the hard disk of the server. 如果使用会话作为HTML生成的组成部分,则意味着无法缓存HTML。
WPEngine是多服务器环境中的共享主机,默认情况下进行缓存。
至于WC,正如您在引用的内容中所说,他们不使用php会话,而是通过在DB中存储会话信息来发明自己的机制。这也是一个有问题的解决方案,因为这意味着如果你不非常小心的话,流量过大可能会导致网站关闭(我想在这种情况下,会话只有在用户开始购买产品的过程时才开始)。为什么他们这样做而不依赖cookie,你必须问他们,我假设跟踪不完整的交易是其中的一部分,另一部分是http站点上的cookie信息基本上是公开的,如果你想避免信息泄漏,你需要将其存储在服务器上。
对你的情况有什么建议?如果没有更多的细节,这将很难说,但您可能应该努力避免使用任何感觉像会话的东西。HTTP不是为会话而设计的,最好不要与生活中的这一事实作斗争。