Перенаправление не работает с заголовком (местоположение) и сессионной переменной - PullRequest
2 голосов
/ 20 февраля 2012

1: я использую register.php для регистрации клиентов,

2: данные, собранные из формы, отправляются на 1.php, они сохраняются в базе данных

3:после того, как данные формы сохранены в базе данных, 1.php пересылает выбранные данные формы (myValue) в register.php? myValue = 'abc'

в 1.php, я сохраняю переменную сеанса, как это

@session_start();
$_SESSION['color']='blue';

код register.php:

 if (isset($_SESSION['color'])) {
            header('Location: http://mydomain.com/thankyou.php');
    }
 else {


@session_start(); 
some other stuff  that was initially use for signing up the clients

Моя логика - проверить переменную сеанса и перенаправить ее на другую страницу

при выполнении шага.1, шаг 2 и шаг 3 завершены, страница должна быть перенаправлена ​​на thankyou.php

в настоящее время, когда выполняется шаг 1, шаг 2, шаг 3 вместо открытия thankyou.php, следующеестраница открывается

http://mydomain.com/register.php?myValue='abc'

однако, если я заново открываю register.php или возвращаюсь к первому шагу (открываю register.php), отображается thankyou.php ...

кто-нибудь может направить меня туда, где я делаю ошибку?почему перенаправление не удается, хотя переменные сеанса создаются?

Обновление кода

Я попробовал следующий код в верхней части моего register.php

@session_start();


   if (isset($_SESSION['color'])) {
            header('Location:http://mydomain.com/thankyou.php');
            exit;
    }
 else{
remaining stuff

это иногда делает трюк, перенаправляет настраница, хотя иногда (больше по количеству), не удается перенаправить на thankyou.php, также код должен удалить всю историю и кэш для работы (после этого все равно пропускаются попадания ..)

Ответы [ 4 ]

3 голосов
/ 20 февраля 2012

В вашем register.php вы не можете проверить переменную сеанса до того, как вы запустите session_start, поэтому ваш код должен быть больше похож на:

session_start(); 
 if (isset($_SESSION['color'])) {
            header('Location: http://mydomain.com/thankyou.php');
    }
 else {
 // Something else....

EDIT:

Еще одна вещь, которую я нашел полезной при попытке установить переменную сеанса в сочетании с перенаправлениями, - переходить к перенаправлению только после запуска функции. Вот как это будет работать:

$throwAwayVariable = setColor('blue');
if($throwAwayVariable ){  // separated out into a function so it wouldn't redirect before the session variable was saved
    session_write_close();
    header("Location: http://mydomain.com/thankyou.php");
}

function setColor($color){
    @session_start();
    $_SESSION['color']='blue';
    return true;
}

Поскольку не весь ваш код опубликован, вам придется выяснить, к чему это приведет, но после этого процесса у меня всегда работали сессионные переменные.

3 голосов
/ 20 февраля 2012

Убедитесь, что вы используете выход (0); сразу после того, как вы сделаете редирект заголовка, иначе php все равно будет анализировать и запускать остальную часть вашего скрипта, иногда это может вызывать некоторые забавные действия.

2 голосов
/ 20 февраля 2012

Ваш session_start() вызов в register.php должен быть ПРЕЖДЕ ЧЕМ вы вызываете любые $_SESSION переменные.

0 голосов
/ 19 апреля 2013

У меня та же проблема, затем я пытаюсь добавить session_start и session_write_close, и это работает!

session_start();
$_SESSION['status'] = 'Updated Poem successfully';
session_write_close(); 
header("location: index.php");
...