PHP сессия не работает правильно, может быть, из-за fb?пожалуйста помоги - PullRequest
0 голосов
/ 12 июня 2011

У меня есть вопрос о сессиях PHP.Я использую сеанс, чтобы держать посетителя в системе. Я уже создал сайт с этим и отлично работает.Сейчас я делаю приложение для Facebook.

При входе в систему (проверка, зарегистрирован ли пользователь в базе данных), я регистрирую id.После этого я использую:

if(session_is_registered("id"))
{
echo "Logged in";
}

Так что, если в браузере отображается «Вход в систему», я абсолютно уверен, что сессия зарегистрирована.Но когда я перехожу на следующую страницу (у которой есть session_start (); вверху страницы), сеанса больше нет.Но если я перехожу на страницу выхода из системы (с помощью session_destroy ();) и затем перехожу к входу в систему, сеанс регистрируется правильно.Также, если я закрою все окна браузера и затем войду в систему, она не будет правильно регистрироваться.

Я пытался уничтожить сеанс непосредственно перед регистрацией 'id', но это также не работает.

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

Пожалуйста, помогите мне.Я потратил впустую дни на это.Заранее спасибо.


Дополнительный код:

Где зарегистрирована сессия:

$id_query = mysql_query ("
    SELECT * FROM Tour11_deelnemers WHERE fb_id = '$user'");
    while ($record = mysql_fetch_assoc ($id_query))
        {
        $id = $record['deelnemer_id'];
        }
if($id > 0)
{
$speelid = $id;
session_register("speelid");
}

После этого проверить, зарегистрирована ли она:

if(session_is_registered("speelid"))
{
echo "Ingelogd";
}

session_is_registered () - это то же самое, что isset () для $ _SESSION.

Так что я не понимаю, пока session_is_registered () верна после регистрации, на следующей странице - ложьснова :( если я не войду сразу после перехода на страницу выхода из системы (session_destroy ();). Так что даже если я уничтожу сеанс непосредственно перед его перезапуском и повторной регистрацией, это не поможет.

1 Ответ

0 голосов
/ 12 июня 2011

Вот решение для вас.

Установите сессию так:

if(!isset($_SESSION['speelid'])){
   $id_query = mysql_query ("SELECT * FROM Tour11_deelnemers WHERE fb_id = '$user'");
        while ($record = mysql_fetch_assoc ($id_query)){
            $id = $record['deelnemer_id'];
        }
    if($id > 0){
        $_SESSION['speelid'] = $id;
    }
}

Проверьте, установлен ли сеанс так:

if(isset($_SESSION['speelid'])){
    echo "Ingelogd";
}

Обновление

Похоже, проблема связана с тем, что IE6 отказывается принимать cookie-файл сеанса, сгенерированный php, когда файл .php ссылается из файла .html на другом сервере.

.HTML для .PHP сессии IE выпуск

При использовании сеанса переменные в файле .php, на которые ссылается кадр (.html или другой тип файла) на другой сервер, чем тот, который обслуживает .php:

В этих условиях IE6 или новее молча отказывается от сеансового cookie который пытается создать (либо неявно или явно, привлекая session_start ()).

Как следствие, ваша сессия переменная вернет пустое значение.

Согласно MS kb, обходной путь добавить заголовок, который говорит, что ваш пульт .php страница не будет злоупотреблять фактом это разрешение было предоставлено.

Поместите этот заголовок в файл .php. который создаст / обновит сессию переменные, которые вы хотите:

Вот полная тема по этому вопросу

Решение

Решение состоит в том, чтобы добавить это в самом верху страницы, чтобы установить сеанс.

<?php header('P3P: CP="CAO PSA OUR"'); ?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...