如果可能的话,应该避免使用cookies吗?

时间:2010-01-03 03:39:36

标签: php cookies

检索用户的cookie并将其作为PHP变量获取的速度比检索会话变量要慢吗?

6 个答案:

答案 0 :(得分:7)

通常,您不必担心会话变量或cookie的检索速度。

但是你应该意识到它们之间的区别:

  • 会话存储在服务器上,这意味着客户端无权访问您存储的有关它们的信息。存储在服务器上的会话数据不需要与每个页面完整传输;客户只需要发送一个ID,然后从服务器加载数据。

  • 另一方面,Cookie存储在客户端上。它们可以长时间保持耐用,并且当您拥有一组Web服务器时,可以让您更顺畅地工作。但是,与Sessions不同,存储在Cookies中的数据会随着每个页面请求完整传输。

答案 1 :(得分:2)

没有。在纯粹的技术术语中,它可能正好相反,因为初始化会话会有一些小的开销。

Cookie数据作为HTTP请求的一部分进入,无论如何,PHP默认将其读入$ _COOKIE。所以它总会在那里。 $ _SESSION要求您在某个时候致电session_start()

然而,两者之间的性能差异将会非常小,不值得担心。

答案 2 :(得分:2)

默认情况下,会话已由名为phpsessionid的cookie支持(以便服务器能够识别客户端并将其与服务器内存中的某个会话关联),因此您的关注实际上使毫无意义。

更容易使用$_SESSION而不是使用“自定义Cookie”重新发明它。

答案 3 :(得分:0)

我认为除了会话将来自磁盘之外,它会大致相同。此外,会议来自cookie。

从安全角度来看,您真的希望在客户端存储信息吗?通常情况下,我不会将内容存储在客户端。

答案 4 :(得分:0)

虽然从代码中的操作角度来看大致相当,但cookie和会话变量是非常不同的东西。

Cookie存储在浏览器中,并随每个请求传输到Web服务器。如果您在用户的浏览器中存储大型cookie或许多小型cookie,则会增加每个请求/响应的大小,这会使每次命中更加昂贵(带宽)和更慢(时间)。此外,客户端可以看到存储在cookie中的任何内容,因此请避免存储任何敏感的内容。

另一方面,会话变量有各自的问题。由于它们存储在服务器上下文中,因此它们不会在群集服务器之间传播。如果服务器/服务重置或用户的会话超时,则会话[]集合中存储的内容将丢失。在会话变量中存储大数据会导致服务器性能下降,如果流量很大,这可能会非常糟糕。会话变量需要cookie,服务器使用cookie来识别用户的会话。用户可以改变他们的cookie以获取对存储在其他会话中的数据的访问权限,尽管由于会话ID是随机的,无意义的伪ID,因此对于任何类型的值都非常难以理解。

最终,所有这些垃圾都应该存储在数据库中。在开发任何强大的应用程序时,应该避免使用会话。 Cookie应该被最低限度地使用 - 通常,我将一个guid存储在cookie中,这有助于我识别用户(类似于sessionID cookie,但是特定于应用程序),但其他一切都在数据库中。这为您提供与服务器无关的数据可用性,安全存储,应用程序而非服务器配置设置的数据生命周期,良好的查询和报告能力等。

正确完成数据库很容易。您收集的任何州信息应存储在数据库中的原因有很多,并且没有充分的理由

答案 5 :(得分:-1)

在某些浏览器中,无法存储cookie,为避免此问题,您可以使用GET和POST方法传递SID(会话ID)或一些隐藏的,填充的文本框值,而不是cookie。