使用cookie缓存页面是否很好?

时间:2011-04-08 03:47:28

标签: php

我使用cookies进行页面缓存,可以吗?

要显示部分静态内容(很少从数据库更新), 我不喜欢与数据库进行很多交互,所以我可以使用cookie将结果存储在客户端的计算机中并直接显示数据吗?

对于数据的真实性和完整性,我为数据创建了一个crc,并与该cookie中的数据一起存储。 crc计算的算法是硬编码的(假设),所以

这个想法有没有缺点?

3 个答案:

答案 0 :(得分:3)

Cookie不应用于缓存,因为您的cookie会在每次请求时从浏览器发送到服务器!!这意味着您发送更多字节,这意味着更高的延迟。因此,通过以这种方式使用cookie,您实际上正在减慢系统速度,而不是帮助它。在网站上缓存数据的正确方法是使用localStorage(或其他HTML5存储类之一)来缓存它。

答案 1 :(得分:3)

这对我来说听起来不错。缓存数据是用户特定的还是全局的?对于全局数据,您最好在服务器端缓存整个生成的页面,并对将来的请求进行响应。使用cookie,您仍然需要在每个请求上动态生成页面。

对于特定于用户的数据,它取决于页面,但您通常希望在会话中存储用户名等内容。缓存类似于用户个人资料页面的内容将不会非常有用,因为它不会经常受到影响。

在任何一种情况下,您最终都会浪费大量带宽接收每个请求的所有额外信息,您仍然需要为每个请求动态生成一个页面。如果您的校验和算法受到损害,并且您在cookie中存储重要内容(如帐户余额或用户名),则还会产生安全隐患。此外,如何使cookie中缓存的数据无效?每个请求都需要有一个机制来检查数据是否过时,这会破坏目的。

答案 2 :(得分:1)

Cookie应该用于存储会话ID和用户名等小字符串。

最好将静态内容写入服务器(或数据库)上的本地文件并提供静态内容,直到您决定使其过期 - 然后重复该过程。

有一些服务器,例如memcached,它们在执行此操作时非常有效,但伪代码是相同的:

if (is_cached('recent_articles') {
   return cached_content('recent_articles');
else {
   save('recent_articles', $articles)
   return cached_content('recent_articles')
}

确保在一定时间后或当您知道其陈旧时过期内容 - 以最合理的为准。