Web

Потеря PHP сеанса после перенаправления

Как решить проблему потери сеанса после перенаправления в PHP?

Недавно я столкнулся с частой проблемой потери сеанса после перенаправления. И после поиска в сети я все еще не могу найти решение.

 

Ответ 1

Сначала выполните эти стандартные проверки:

  1. Убедитесь, что session_start();вызывается перед вызовом каких-либо сеансов. Таким образом, беспроигрышный вариант разместить его в начале вашей страницы сразу после открывающего <?php объявления, прежде чем выполнять что-либо еще. Также убедитесь, что перед открывающим <?php объявлением нет пробелов/табуляции.

  2. После header перенаправления завершите текущий сценарий, используя exit();(также можно использовать, session_write_close(); или session_regenerate_id(true);).

  3. Убедитесь, что файлы cookie включены в браузере, который вы используете для тестирования.

  4. Убедитесь, что register_globals отключено. Это можно проверить в php.ini файле, а также с помощью phpinfo(). Обратитесь к документации, чтобы узнать, как его выключить.

  5. Убедитесь, что вы не удалили и не деактивировали сеанс.

  6. Убедитесь, что ключ в вашем суперглобальном массиве $_SESSION нигде не перезаписан.

  7. Убедитесь, что вы перенаправляете на тот же домен. Таким образом, перенаправление с www.yourdomain.com на yourdomain.com не переносит сеанс дальше.

  8. Убедитесь, что расширение вашего файла .php (такое бывает!).

Это наиболее распространенные ошибки, но если они не помогли, то проблема, скорее всего, связана с вашей хостинговой компанией. Если все работает на localhost, но не на вашем удаленном/тестовом сервере, то, скорее всего, виноват в этом хостер. Так что проверьте базу знаний вашего хостинг-провайдера (также попробуйте их форумы и т. д.). Для таких компаний, как FatCow и iPage, требуется, чтобы вы указали session_save_path. Например, вот так:

session_save_path('"your home directory path"/cgi-bin/tmp');

session_start();

 

Замените «путь к вашему домашнему каталогу» фактическим путем к домашнему каталогу. Обычно он находится в панели управления (или аналогичной), но вы также можете создать test.php файл в корневом каталоге и ввести:

<?php echo $_SERVER['SCRIPT_FILENAME']; ?>

 

И, конечно же, убедитесь, что папка действительно существует в вашем корневом каталоге (некоторые программы не выгружают пустые папки при синхронизации).

 

 

Ответ 2

Я перепробовал все возможные решения, но у меня ни одно не заработало! Конечно, я использую виртуальный хостинг.

В конце концов, я решил проблему, используя «относительный URL» внутри заголовка перенаправления!

header("location: http://example.com/index.php")

header("location: index.php")

 

Ответ 3

Когда я использую относительный путь "dir/file.php" с функцией header(), у меня все работает. Я думаю, что сеанс почему-то не сохраняется при перенаправлении с использованием полного url… 

//По каким-то причинам сохраняет информацию о сеансе.

header("Location: dir");

//По каким-то причинам не сохраняет сессию.

header("Location: https://mywebz.com/dir")

 

Ответ 4

Я столкнулся с этой проблемой на одной конкретной странице. Я устанавливал значения $_SESSION на других страницах прямо перед перенаправлением, и все работало нормально. Но эта конкретная страница не работала.

Наконец я понял, что на этой конкретной странице я разрушал сеанс в начале страницы, но никогда не запускал его снова. Итак, моя функция уничтожения изменилась с:

function sessionKill(){

    session_destroy();

}

 

На такую:

function sessionKill(){

    session_destroy();

    session_start();

}

 

И все заработало!

 

Ответ 5

У меня была такая же проблема, и я нашел самый простой способ. Я просто перенаправил на редирект .html с одной строкой JS:

<!DOCTYPE html>

<html>

<script type="text/javascript">

<!--

window.location = "admin_index.php";

//–>

</script>

</html>

вместо PHP

header_remove();

header('Location: admin_login.php');

die;

 

Надеюсь, это поможет.

 

Ответ 6

У меня была такая же проблема с неработающим перенаправлением, и я попробовал все решения, которые смог найти, мое перенаправление заголовка использовалось в форме.

Я решил эту проблему, поместив перенаправление заголовка на другую страницу php 'signin_action.php' и передав параметры переменных, которые я хотел, в параметрах URL-адреса, а затем переназначил их в форме 'signin_action.php'.

signin.php

if($stmt->num_rows>0) {

$_SESSION['username'] = $_POST['username'];

echo '<script>window.location.href = "http://'.$root.'/includes/functions/signin_action.php?username='.$_SESSION['username'].'";</script>';

error_reporting(E_ALL);

 

signin_action.php

<?php

require('../../config/init.php');

$_SESSION['username'] = $_GET['username'];

if ($_SESSION['username']) {

 echo '<script>window.location.href = "http://'.$root.'/user/index.php";</script>';

 exit();

} else {

echo 'Сессия не установлена';

}

 

?>

 

Это не красивый обходной путь, но он сработал.

Схожие статьи

Web

Генератор случайных строк в PHP

Адаптивный дизайн. Делаем сайты для любых устройств своими руками
Web

Адаптивный дизайн. Делаем сайты для любых устройств своими руками

Web

Как использовать PHPMailer для массовой рассылки писем

Установка MODX Revolution на хостинг: как это сделать, инструкция
Web

Установка MODX Revolution на хостинг: как это сделать, инструкция

×