сессия в php работает только на той же странице, но не работает на других страницах того же сайта - PullRequest
2 голосов
/ 27 марта 2019

У меня есть две простые страницы (test.php, test2.php).

test.php

<?php
session_start();
$_SESSION['username'] = "wria";
echo '<a href = "test2.php">click to another page</a> <br>';

if($_SESSION['username']) {
echo $_SESSION['username'];
}
?>

test2.php

<?php
session_start();
var_dump($_SESSION);
if($_SESSION['username']) {
echo $_SESSION['username'];
}
?>

на выходе, когда я открываю test.php , после обновления enter image description here

но когда я перехожу к test2.php , выводится:

enter image description here

ничего не отображается.

Примечание. Этот файл находится на реальном хостинге, а не локально.

Ответы [ 4 ]

1 голос
/ 31 марта 2019

Ваш путь для сохранения сеанса недоступен. Вы должны изменить его на доступное место. Вы можете изменить в php.ini

1 голос
/ 27 марта 2019

Я думаю, что проблема в конфигурации вашего сервера. Вы пробовали это в местной среде? Вот несколько шагов, которые помогут вам отладить это из сеанса PHP, потерянного после перенаправления

Сначала выполните обычные проверки:

  1. Убедитесь, что session_start (); вызывается до вызова любых сессий. Таким образом, безопаснее было бы поставить его в начале вашей страницы, сразу после открытия
  2. После перенаправления заголовка завершите текущий скрипт, используя exit (); (Другие также предложили session_write_close (); и session_regenerate_id (true), вы также можете попробовать их, но я бы использовал exit ();)
  3. Убедитесь, что файлы cookie включены в браузере, в котором вы их тестировали.
  4. Убедитесь, что register_globals выключен, вы можете проверить это в файле php.ini, а также с помощью phpinfo ().
  5. Убедитесь, что вы не удалили или не очистили сеанс
  6. Убедитесь, что ключ в вашем суперглобальном массиве $ _SESSION нигде не перезаписан
  7. Убедитесь, что вы перенаправляете на тот же домен. Таким образом, перенаправление с www.yourdomain.com на yourdomain.com не приведет к продолжению сеанса.
  8. Убедитесь, что у вас расширение файла .php (это происходит!)

Возможно, вам также придется настроить session_save_path, как это было сказано в посте, на который я ссылался.

1 голос
/ 29 марта 2019

если вы добавите этот код: error_reporting (E_ALL); ini_set ('display_errors', 1); наверх для test2.php, вы увидите свою ошибку. если вы видите (нет такого файла или каталога), это означает, что сохраненный сеанс недоступен, вы можете изменить его на другое место. или, возможно, у вас нет разрешения для папки, в которую будет сохраняться сеанс.

0 голосов
/ 27 марта 2019

Скорее всего, вы не сохраняете идентификатор сеанса в любом случае, и каждый раз открывается новый сеанс.

Пожалуйста, посмотрите на https://www.php.net/manual/en/session.idpassing.php

Есть несколько способов, которыми это можно «решить», используя куки, параметр GET и т. Д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...