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 'Сессия не установлена';

}

 

?>

 

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

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

Валидный e-mail: что это, проверка почты на валидность через валидатор
Web

Валидный e-mail: что это, проверка почты на валидность через валидатор

Касперский SSL-сертификат для сайта: почему важно его получить?
Web

Касперский SSL-сертификат для сайта: почему важно его получить?

Кто такой веб-разработчик. Описание профессии и ее подводные камни
Web

Кто такой веб-разработчик. Описание профессии и ее подводные камни

Web

Для laravel требуется расширение Mcrypt PHP

×