【问题标题】:PHP - Get the previous value of a session?PHP - 获取会话的先前值?
【发布时间】:2018-12-03 18:35:24
【问题描述】:

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

这是我目前得到的:

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

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

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

旁注:

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

【问题讨论】:

  • 您是否尝试检查该值是否发生变化?所以,覆盖$_SESSION["prev-value"] 不是在每个请求中,而只是在那些$_SESSION["value"] != $value

标签: php session cookies session-variables session-cookies


【解决方案1】:

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

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

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

更新: 对于您的 cmets,看起来值得尝试将以前的值作为数组。因此,将您的 $_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;

【讨论】:

  • 我理解你的逻辑,但遗憾的是,我需要在调用 GET 或 POST 后获取之前的值,因此在你的情况下会话仍将被覆盖
  • 除了文本文件或数据库之外,还有什么我可以解决的吗?
  • @John 您可以尝试将 previous 值 存储在数组中。不只是使用$_SESSION["prev-value"] = $_SESSION["value"];,而是使用$_SESSION["prev-value"][] = $_SESSION["value"];,这样就可以获取值的历史了。
  • 你有 127,000 声望哈哈,但是我现在正在实施这个
  • 我只想存储 2 个值,一个是通过 GET 得到的,一个是之前的,仅此而已
【解决方案2】:

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

$_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
                     ......
                     ......

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-25
    • 1970-01-01
    相关资源
    最近更新 更多