在一些语言C#或.NET中,这是一个静态变量,但在PHP中,每次请求后都会清空内存。我希望该值在所有请求中保持不变。我不想使用$_SESSION,因为每个用户的情况都不一样。
**为了帮助解释这里是一个例子:**我想有一个这样的脚本,将计数。无论哪个用户/浏览器打开的网址。
<?php
function getServerVar($name){
...
}
function setServerVar($name,$val){
...
}
$count = getServerVar("count");
$count++;
setServerVar("count", $count);
echo $count;
我希望值存储在内存中。它不会是apache重新启动时需要持久化的东西,数据也不是那么重要,需要线程安全。
UPDATE:如果在负载平衡的环境中,每个服务器的值不同,我很好。C#或Java中的静态变量也不会同步。
4条答案
按热度按时间u7up0aaq1#
通常使用数据库来存储计数。
但是,作为一种替代方法,您可以使用文件来执行此操作:
bnlyeluc2#
正如bspates所说,唯一的方法是一个不依赖于服务器上任何资源的工具,如果你有多台服务器,你不能依赖每台机器上基于内存的机制,你必须在服务器之外存储这个数字,因为每台服务器将存储它自己的文件或内存的值。
如果你只有一个服务器来接收你的请求,像$_SESSION这样的文件写入就可以工作。如果有多个服务器,你需要任何类型的数据库,所有的服务器都可以与之通信。
ff29svar3#
在php中你必须使用一个所有服务器共享的外部存储,最常用的工具是memcached,但是sql和redis都能很好地满足这个需求。
vsaztqbk4#
最简单的方法之一是更改
SESSION
的行为,尽管您不能再进行常规会话。你所要做的就是在
session_start()
之前添加下面的代码,这段代码使得session_id
对于所有的请求都是一样的,因此假设所有的请求都在一个会话中(即使你从浏览器的存储标签中更改它,服务器仍然会发送下面的代码):重要提示:您必须做一些工作才能增加会话持续时间,例如将
lifetime
更改为session_set_cookie_params
,将session.save_path
(在共享主机中)和session.gc_maxlifetime
更改为ini_set