将PHP会话和Cookie视为缓存选项是不好的吗?

将PHP会话和Cookie视为缓存选项是不好的吗?,php,session,cookies,memcached,redis,Php,Session,Cookies,Memcached,Redis,下面是PHP中基于驱动程序的缓存类的简单开始。另一个用户提交了它 <?php class Cache { protected $Driver; public function __construct($driver) { require_once 'drivers/' . $drivers . '.driver.php'; $driver = "Cache_Driver_" . $driver; $this->

下面是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);
    }
}

?>
我意识到会话和cookie通常不被认为是缓存的一部分,但我认为它们适合这里,不是真正“缓存”大量数据,而是更多地作为获取/设置会话和cookie的一种方式,而不是拥有特定的会话和cookie类,它们将利用此类中的get/set/unset方法

PHP有足够的方法来处理cookie和会话。它们被称为
$\u COOKIE
/
setcookie
$\u SESSION
。即使界面在表面上是足够的,您也不需要为其他目的而设计的包装器。例如,Cookie有额外的事情你必须担心,比如域名和过期时间,而会话不会。您的缓存数据可能会过期,但是您将如何在会话中管理过期信息

如果要包装它们,请包装它们,但不要将它们插入为其他目的设计的界面。

这难道不需要我立即使用会话驱动程序启动缓存,就像在调用其他任何东西之前在应用程序的顶部一样吗

不一定。当会话尚未启动时返回空字符串,至少在交互式提示时返回。您可以使用它来检测是否需要启动会话

我意识到会话和cookie通常不被认为是缓存的一部分,但我认为它们适合这里,不是真正“缓存”大量数据,而是更多地作为获取/设置会话和cookie的一种方式,而不是拥有特定的会话和cookie类,它们将利用此类中的get/set/unset方法

PHP有足够的方法来处理cookie和会话。它们被称为
$\u COOKIE
/
setcookie
$\u SESSION
。即使界面在表面上是足够的,您也不需要为其他目的而设计的包装器。例如,Cookie有额外的事情你必须担心,比如域名和过期时间,而会话不会。您的缓存数据可能会过期,但是您将如何在会话中管理过期信息

如果要包装它们,请包装它们,但不要将它们插入为其他目的设计的界面。

这难道不需要我立即使用会话驱动程序启动缓存,就像在调用其他任何东西之前在应用程序的顶部一样吗


不一定。当会话尚未启动时返回空字符串,至少在交互式提示时返回。您可以使用它来检测是否需要启动会话

PHP已经支持不同的后端来管理会话。不要创建自己的包装器,PHP会话已经是一个包装器了。您可以将PHP配置为使用文件(默认)、mysql、memcache或许多其他方法。

PHP已经支持不同的后端来管理会话。不要创建自己的包装器,PHP会话已经是一个包装器了。您可以将PHP配置为使用文件(默认)、mysql、memcache或许多其他方法。

cookies

Cookie中的数据存储存在许多限制,这些限制将使Cookie作为缓存解决方案变得不理想,并且可能不值得付出努力:

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

$\u会话
中缓存数据更为合理,因为来回通信量的唯一增加是单个小会话id cookie头。
$\u SESSION
数组中的缓存最大的缺点是会话数据对于每个客户端都是独立的。与其他缓存后端(APC、Memcache等)一起,数据共享并可用于每个客户端的请求。这引发的问题是,对于每客户端会话缓存,无法轻松地从其他客户端的会话数据中清除或更新值,从而导致缓存过时

结论

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


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

cookies

Cookie中的数据存储存在许多限制,这些限制将使Cookie作为缓存解决方案变得不理想,并且可能不值得付出努力:

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

$\u会话
中缓存数据要合理得多
<?php  
$cache = new Cache('Session');
?>