在ASP.NET中,如果我将变量(或对象)声明为静态的(或者我将其设为单例),那么我可以在多个用户的多个会话中使它持久化存在(它被注册在服务器范围内),这样我就不必在每次请求时都进行初始化。
PHP中是否有类似的功能呢?谢谢。
如果您为所有会话使用相同的sessionId,则可以使用Session Storage来实现此目的。
session_id('xyz');
session_start();
for ($i=0; $i < 100000; $i++) {
$_SESSION['counter'] = isset($_SESSION['counter']) ? $_SESSION['counter'] + 1 : 0;
}
echo "<br>session_id(): ".session_id() . "<br>counter: ".$_SESSION["counter"];
使用两个浏览器尝试此脚本,您将看到此方法在两个浏览器之间共享数据,并且非常快速。
Symfony和其他框架使用"PHPFastCache",它支持多种缓存数据的驱动程序,包括APC、SQLite、MongoDB或者简单地使用文件系统。
您可以在https://github.com/PHPSocialNetwork/phpfastcache下载它。
这里是一个使用文件缓存的示例:
use Phpfastcache\Helper\Psr16Adapter;
$defaultDriver = 'Files';
$Psr16Adapter = new Psr16Adapter($defaultDriver);
// Setter action
if(!$Psr16Adapter->has('test-key')) {
$data = 'lorem ipsum';
$Psr16Adapter->set('test-key', 'lorem ipsum', 300); // kept in cache for 300 seconds (5 minutes)
}
// Getter action
else {
$data = $Psr16Adapter->get('test-key');
}
您可以在会话中存储序列化副本
class test{ private static $instance; public property; private __construct(){} public getInstace(){ if(!self::$instance){ self::$instance = new test; } return self::$instance; } } $p = test->getInstance(); $p->property = "Howdy"; $_SESSION["p"] = $p;
下一页
$p = $_SESSION["p"]; echo $p->property; // "Howdy"