gpt4 book ai didi

php - 将 PHP session 和 cookie 视为缓存选项是否不好?

转载 作者:可可西里 更新时间:2023-11-01 11:04:18 25 4
gpt4 key购买 nike

下面是 PHP 中基于驱动程序的缓存类的简单开始。另一个用户提交了它...

<?php
class Cache
{
protected $Driver;
public function __construct($driver)
{
require_once 'drivers/' . $drivers . '.driver.php';
$driver = "Cache_Driver_" . $driver;

$this->Driver = new $driver;
}


public function create($key,$value)
{
return $this->Driver->create($key,$value);
}

public function read($key,$value)
{
return $this->Driver->read($key,$value);
}

public function update($key,$value)
{
return $this->Driver->update($key,$value);
}

public function remove($key)
{
return $this->Driver->remove($key);
}
}

?>

我的计划是为我将在我的应用程序中使用的每种缓存方法设置单独的类“文件/驱动程序”。到目前为止,我计划使用,

- 文件
- 装甲运兵车
- 内存缓存或内存缓存
- 雷迪斯
- session
- cookies

所以我的主要问题 (#1) 在这里,我意识到 session 和 cookie 通常不被认为是缓存的一部分,但我认为它们适合放在这里,而不是真正的“缓存”很多数据,但更多的是作为获取/设置我的 session 和 cookie 的一种方式,而不是具有特定的 session 和 cookie 类,他们将利用我在此类中的 get/set/unset 方法。

请告诉我您对这个想法的看法?好的,坏的,有什么建议吗?谢谢!

问题(#2) n对于我的 session 类,我在想,在 session 驱动程序类的构造函数中,我可以调用

session_start()

那里。可能的问题,这是否需要我立即使用 session 驱动程序启动缓存,就像在调用其他任何东西之前在我的应用程序顶部一样?或者更糟的是,必须在我的应用程序顶部的类本身之外调用 session_start() 吗?再次寻找建议,我觉得我忽略了一些东西,再次感谢您的帮助。

<?php  
$cache = new Cache('Session');
?>

最佳答案

cookies

cookie 中的数据存储有许多限制,这使得它们作为缓存解决方案不太理想,可能不值得为此付出努力:

  • 每个域的 Cookie 数量和大小都有限制。例如in IE ,每个 cookie 限制为 4kb,并且每个域最多可以有 20 个 cookie。
  • Cookie 随每个请求发送到服务器。如果您在 cookie 中存储 80kb 的数据,这将使每个请求(包括对同一主机上的非动态资源的请求)都非常大。
  • Cookie 是针对每个用户的(见下文)

$_SESSION

$_SESSION 中缓存数据更为合理,因为来回流量中唯一增加的是单个小 session ID cookie header 。在 $_SESSION 数组中缓存的最大缺点是 session 数据对于每个客户端都是独立的。与您的其他缓存后端(APC、Memcache 等)共享数据并可用于来自每个客户端的请求。这引发的问题是,对于每个客户端的 session 缓存,没有简单的方法来清除或更新其他客户端 session 数据的值,从而导致缓存过时。

结论

虽然每个客户端缓存通常是合理的东西,但它们与您提到的其他共享存储缓存后端(APC、memcache 等)在操作模型上的差异意味着许多应用程序需要共享存储当出现每个客户端缓存时,缓存可能会中断。两种类型的缓存都有自己的位置,但混淆使用的是哪种类型可能会导致问题。

就个人而言,我会跳过 session 数据和 cookie 作为缓存后端,除非您专门构建每个客户端的缓存系统。在那种情况下,我会跳过 cookie,只实现 session 存储。

关于php - 将 PHP session 和 cookie 视为缓存选项是否不好?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5480579/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com