Хорошо, я только что заметил эту проблему. Должен быть способ обойти это.
Пример…
На странице A.php и на странице B.php есть ссылка на страницу ALPHABET.php. ALPHABET.php получает указанные значения переменных в зависимости от того, какая страница является реферером.
Все вовлеченные страницы имеют session_start (); в начале.
Страница A.php имеет:
<?php
$_SESSION['name'] = "John";
?>
Страница B.php имеет:
<?php
$_SESSION['name'] = "Jane";
?>
Страница ALPHABET.php имеет:
<?php
$personName = $_SESSION['name'];
echo "Hello, I am ".$personName;
?>
Я решил не закрывать сеанс в ALPHABET.php, потому что я хочу, чтобы информация по-прежнему загружалась правильно, если некоторые обновят страницу. Если сессия была закрыта, то $ _SESSION [‘name’] не существовало бы или не имело значения.
Все это работало хорошо, пока я не загрузил обе страницы, A.php и B.php, одновременно (через новую вкладку). Я заметил, что когда я нажимаю ссылку на ALPHABET.php на любой из этих страниц, она не всегда получает информацию о сеансе со страницы, которая была ссылающейся. Я отметил, что в этой ситуации последняя загруженная страница будет иметь информацию, отображаемую в ALPHABET.php, а не страницу, с которой я щелкнул ссылку.
т.е. я загружаю обе страницы вверх. Сначала A.php, а затем я открываю B.php в новой вкладке. Я нажимаю на ссылку ALPHABET.php внутри A.php. ALPHABET.php загружает информацию B.php. Я предполагаю, что это потому, что B.php был последней загруженной страницей, и поэтому он переписал все данные сеанса из A.php и заменил их своими собственными.
можно ли это исправить?
Сеансы PHP хранятся в файлах cookie, которые используются всеми вкладками браузера. НАПРИМЕР. нет хорошего способа обойти это, просто используя ванильные сеансы.
Однако одним из эффективных способов было бы сохранить информацию в двух отдельных переменных, а затем поместить запрос GET, специфичный для каждого реферера.
Например.
A.php
$_SESSION["A_name"] = "John";
?>
<a href="Alphabet.php?ref=A">Click</a>
B.php
$_SESSION["B_name"] = "Jane";
?>
<a href="Alphabet.php?ref=B">Click</a>
Alphabet.php
if($_GET["ref"] == "A")
echo $_SESSION["A_name"];
else if($_GET["ref"] == "B")
echo $_SESSION["B_name"];
Других решений пока нет …