PHP - получить предыдущее значение сеанса? - PullRequest
0 голосов
/ 25 июня 2018

Обычно у меня есть значение сеанса, которое будет периодически обновляться, но мне нужно сохранить предыдущее значение сеанса.

Вот что я получил до сих пор:

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

И проблема, конечно, в том, что когда я иду на <?php echo $_SESSION["prev-value"]; ?>, оно будет перезаписано новым значением, так как мы проверяем, равно ли оно новому значению.

Я не хочу иметьсохранить предыдущие значения в базе данных или текстовом файле, это будет единственный способ или есть какой-нибудь способ обойти это?

Примечание:

Я толькоМне нужно последнее значение, поэтому мне не нужно хранить массив, только значение перед самым новым

Ответы [ 2 ]

0 голосов
/ 25 июня 2018

Установите предыдущее значение как пустое в первый раз.и измените свой код как

$_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
                     ......
                     ......
0 голосов
/ 25 июня 2018

Делайте это только когда у вас есть параметр 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;
...