PHP - 获取会话的先前值?

PHP - Get the previous value of a session?

基本上我有一个会定期更新的会话值,但我需要保存会话的先前值。

这是我目前得到的:

$value = $_GET['value'];
$_SESSION["prev-value"] = $_SESSION["value"];
$_SESSION["value"] = $value;

当然,问题是当我执行 <?php echo $_SESSION["prev-value"]; ?> 时,它会被新值覆盖,因为我们正在检查它是否等于新值。

我不想将以前的值存储在数据库或文本文件中,这是唯一的方法还是有什么方法可以克服这个问题?

旁注:

我只需要最后一个值,所以我不需要保留大量,只需要最新值之前的值

仅当您有 GET 参数来设置它时才这样做。从技术上讲,您应该使用 POST 来更新或更改服务器端的值,其中包括会话。

if (isset($_GET['value'])) {
  $value = $_GET['value'];
  $_SESSION["prev-value"] = $_SESSION["value"];
  $_SESSION["value"] = $value;
}

通过以上方式,除非你有/?value=something,否则你的会话值不会受到影响。

更新: 根据您的评论,看起来值得尝试将以前的值作为数组。所以稍微改变你的 $_SESSION["prev-value"] 作为一个数组。

if (isset($_GET['value'])) {
  $value = $_GET['value'];
  if (!isset($_SESSION["prev-value"]))
    $_SESSION["prev-value"] = array();
  $_SESSION["prev-value"][] = $_SESSION["value"];
  $_SESSION["value"] = $value;
}

这样,您将拥有可迭代的先前值的历史记录,并且您不需要数据库或文本文件。 :) 即使相同的值设置了太多次,您也可以使用 PHP 函数 array_unique() 来获取数组的唯一值,如果您疯了,array_reverse() 它并获得前一个的第二个 [1] 值。 ;)

要获得上一个,您可能需要做的是:

$lastValue = array_reverse(array_unique($_SESSION["prev-value"]));
if (count($lastValue) > 1)
  $lastValue = $lastValue[1];
echo $lastValue;

第一次将之前的值设置为空白。并将您的代码更改为

$_SESSION["prev-value"] = $_SESSION["value"] ?? '';
$_SESSION["value"] = $_GET['value'];

代码流

$_SESSION["prev-value"]---------------$_SESSION["value"]
                     ""---------------10 ----->First time load
                     10---------------20 ----->Next time load
                     20---------------30 ----->Next time load
                     ......
                     ......