Как перенаправить страницу на ту же страницу в php - PullRequest
2 голосов
/ 14 февраля 2011

У меня есть два файла;логика такова, что если сеанс запущен, мне нужно запустить кусок кода, а если он не установлен, то мне нужно запустить остальную часть.В любом случае мне нужно перекинуть страницу на себя.Вот мой первый файл

Первый файл (file1.php)

<?php
require_once('file2.php');
if(isset($_SESSION))
        echo '<br>Session set!';
else
{
    //echo '<br>Session NOT set...';
    sessStart();
    header("Location:file1.php");
}
?>

Второй файл (file2.php)

<?php
function sessStart()
{
    session_start();

    //some other code here but nothing that echo's
}
?>

Здесь я вызываю метод sessStart () для инициализации сеанса в остальной части при первом запуске.В следующий раз он должен идти не в раздел if, а в другую часть.

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

Что не так, что я делаю?

Ответы [ 3 ]

3 голосов
/ 14 февраля 2011

Хорошо, во-первых, бессмысленно, что вы делаете.

Ответ kjy112 абсолютно ничего не делает, кроме того, что страница постоянно обновляется.

вам никогда не нужно проверять _session, вам просто нужно убедиться, что перед любым использованием $_SESSION или любого отправленного контента вы звоните session_start().

Я бы порекомендовал вам реструктурировать ваш текущий код в нечто более похожее на это.

require_once "includes/startup.php";

и в пределах startup.php

//Load primary includes
require_once "libraries/session.php";
require_once "libraries/input.php";
require_once "libraries/output.php";
//etc

if(!session_id())
{ 
    session_start();
    session_regenerate_id();

    //Other session bits
}

Это в основном все, что тебе нужно.

1 голос
/ 14 февраля 2011

Я пытался сделать что-то вроде приведенного ниже кода, но использование сессии в моем примере заставило вас подумать, что я испортил инициализацию сессии :) Это была скорее проблема с заголовком.Ниже приведен код НЕ ВОЗМОЖНО

//filename [1.php]
<?php
$x = 'n';

if($x == 'y')
    echo 'entered top';
else
{
    $x = 'y';
    header('1.php');
}
?>

Вы не можете перенаправить страницу на себя, используя header();он будет постоянно перенаправляться.

0 голосов
/ 14 февраля 2011

Вы не можете выполнить перенаправление header после того, как у вас есть что-либо эхо.

Ваш пример сработает, если вы не отобразите эхо "не установлено" перед перенаправлением.Когда вы ожидали увидеть это сообщение при перенаправлении сразу после него?

Лично я бы не включал функцию запуска сеанса в функцию, я включал бы файл, запускаемый session_start(), в каждый нужный вам скриптв.

...