检索用户的Cookie并获取其值作为PHP变量比检索会话变量慢吗?如果可能,应该使用cookie吗?
回答
不是。纯粹的技术术语,它可能是相反的,因为初始化会话会有一些小的开销。
Cookie数据作为HTTP请求的一部分进入,无论如何,PHP默认将其读入$ _COOKIE。所以它总是会在那里。 $ _SESSION要求您在某个时间拨打session_start()
。
但是,两者之间的性能差异将会小得可笑,不值得担心。
我相信它会是相同的,除了会议将从磁盘来。无论如何,该会话还是来自cookie。
从安全的角度来看,你真的想在客户端存储信息吗?通常情况下,我不会将东西存储在客户端。
会话默认已经由名为phpsessionid
的Cookie支持(以便服务器能够识别客户端并将其与服务器内存中的某个会话相关联),因此您的担心实际上没有意义。
使用$_SESSION
而不是用“自定义cookie”重新创建它只是更容易。
会话变量不是对普通cookie的奇特抽象。 – 2010-01-03 03:49:25
这完全取决于“自定义cookie”的用途。但是,他的问题并非如此。 “ – BalusC 2010-01-03 03:51:25
通常,您不应该担心会话变量或cookie的检索速度。
您应该然而,知道它们之间的区别:
会话存储的服务器,这意味着客户不必访问您存储有关它们的信息。会话数据存储在您的服务器上,不需要每页都完整地传输;客户只需发送一个ID并从服务器加载数据。
另一方面,Cookie存储在客户端。它们可以长时间持久使用,并且可以让您在拥有一组Web服务器时更加顺畅地工作。然而,与会话不同,存储在Cookie中的数据会随每个页面请求一起完整传输。
在某些浏览器,它是不可能存储的cookie,以避免这个问题,你可以通过一个SID(会话ID)或一些隐藏的,充满,文本框的值,而不是饼干,通过使用GET和POST方法。
这将是非常繁琐而繁琐的工作。如果用户想要回到域名会发生什么?如果用户在GET请求的情况下修改URL,会发生什么情况? – Nirmal 2010-01-03 09:17:04
如果用户更改了url中的sid,它就像更改cookie(这是可能的) – 2010-01-03 10:22:01
尽管从代码操作角度来看大致相当,但Cookie和会话变量是非常不同的东西。
Cookie存储在浏览器中,并随每个请求一起发送到Web服务器。如果您在用户的浏览器中存储大型cookie或大量小型cookie,则会增加每个请求/响应的大小,从而导致每次点击成本更高(带宽),速度更慢(时间)。此外,存储在cookie中的任何东西都可以被客户看到,因此避免存储任何敏感的东西。
另一方面,会话变量有自己的一套问题。由于它们存储在服务器上下文中,因此它们不会在集群服务器之间传播。如果服务器/服务重置或用户的会话超时,则存储在会话[]集合中的任何内容都将丢失。将大量数据存储在会话变量中会导致服务器的性能损失,如果您拥有大量流量,这可能会非常糟糕。会话变量需要一个cookie,服务器用它来识别用户的会话。这是可行的用户改变他们的cookie来访问存储在其他会话数据,尽管这会是相当刻着很难与任何类型的值做到,因为会话ID是随机的,没有意义的伪标识。
最终,所有的垃圾都应该被存放在一个数据库反正。会话是一种懒惰的方便,在开发任何强大的应用程序时应该避免。应该尽可能少地使用Cookie--通常,我将cookie存储在cookie中,这可以帮助我识别用户(类似sessionID cookie,但是特定于应用程序),但其他所有内容都会存储在数据库中。这使您的服务器无关的数据可用性,安全存储,数据生命周期您的应用,而不是服务器的配置,良好的查询和报表功能设置等做对的时候
数据库是容易的。有很多很多的原因,你收集任何状态信息应存储在数据库中,并没有充分的理由不来。
- 1. 如果我可以自己开发,我应该使用CMS吗?
- 2. 如果可能,我应该省略异步/等待吗?
- 3. 我应该尽可能使我的功能尽可能通用吗?
- 4. 我应该使用咖喱功能吗?
- 5. 如果configure.ac可用,应该分发“configure”脚本吗?
- 6. 使用https时应该加密cookie内容吗?
- 7. gwt使用jquery效果可能吗?
- 8. 苹果会因为使用cookie而拒绝应用程序吗?
- 9. 如果if包含返回值,我应该使用else吗?
- 10. 如果表格无意义,我应该使用主键ID吗?
- 11. 如果我使用BLL,我还应该访问DAL吗?
- 12. 如果使用SSL,我们应该自己加密数据吗?
- 13. 我可以在Phonegap中使用Cookie吗?
- 14. 使用jsonify时可以设置cookie吗?
- 15. 僵尸/蜘蛛可以使用Cookie吗?
- 16. Cookie可在cookie header中使用,但不能从getCookies()中使用?
- 17. Selenium有可能过期Cookie吗?
- 18. 我应该使用Application.Lock()吗?
- 19. GetRequiredService应该使用GetService吗?
- 20. 我应该使用Zend_Form吗?
- 21. 我应该使用Umbraco吗?
- 22. 我应该使用AJAX吗?
- 23. 我应该使用Bootstrap吗?
- 24. 我应该使用memcache吗?
- 25. 我应该使用cflock吗?
- 26. 我应该使用AutoreleasePool吗?
- 27. 我应该使用fieldset吗?
- 28. 应该使用Application.UseWaitCursor吗?
- 29. 我应该使用Struct吗?
- 30. 我应该使用[autorelease]吗?
听起来不错,我将使用会话不管,但我想添加更多的东西进入我的饼干,但我有一个坏的经验一次,它是JavaScript的使用cookie,但并没有PHP,我的PHP页面将加载,然后JS会读一个cookie并责令基于cookie数据在页面上的某些项目的位置,并减缓了页面朝下放在页面加载 – JasonDavis 2010-01-03 03:53:02
很多这不是真的。 Cookie会在页面生命周期之外产生性能问题 - 在发送响应之前处理和写入页面之前会读取它们。会话变量在服务器中产生命中,只对页面呈现时间没有影响循环的请求/响应部分。这些是苹果和桔子。在PHP中, – 2010-01-18 17:54:39