У меня есть простой скрипт, который устанавливает валюту с помощью переменной сеанса php, однако, как только он возвращает пользователя в каталог, в котором они были раньше, сеанс больше не установлен.PHP - Передача сеансов между папками
(этот скрипт находится в корневой папке /index.php)
<?php
if (isset($_POST[product_currency])) {
$postCurrecy = $_POST[product_currency];
session_destroy();
session_start();
$_SESSION[currency] = $postCurrecy;
echo $_SESSION[currency].' = '.$_POST[product_currency];
echo "<meta http-equiv='refresh' content='1;URL=$_SERVER[HTTP_REFERER]'>";
die();
}
?>
папка возвращается к тому,/продукция /, которая содержит этот:
<?php if (empty($_SESSION[currency])) { echo 'uh oh'; } else { echo $_SESSION[currency]; } ?>Currencies:
<form id="select-form" action="/" method="post">
<select class="inputbox" name="product_currency" size="1" >
<option value="EUR" >€ Euro</option>
<option value="USD" selected="selected">$ US Dollar</option>
<option value="GBP" >£ GBP</option>
</select>
<input class="button" type="submit" name="submit" value="Change" />
</form>
$_SESSION[currency]
возвращает «Ой-ой», потому что он пуст :(
Вам нужно вызвать 'session_start()' в верхней части скриптов _all_, которые обращаются к сеансу. Кроме того, процитируйте свои ключи массива, как в '$ _SESSION ['currency']' –
Ahh, что сработало: D ty, всегда работает отлично без кавычек, поэтому я не понимаю, почему я должен добавить их – King
Вы должны добавьте их, потому что куча предупреждений бросается каждый раз, когда вы этого не делаете, но если вы отключили error_reporting, вы их не увидите. Это плохая практика - ключи массива - это ints или строки, но если вы не цитируете их, PHP увидит их как неопределенные константы и любезно преобразует их в строки для вас. Плохая практика полагаться на него и может фактически вызвать столкновения с реальными определенными константами. –