Переменные сеанса PHP - исчезают и появляются снова - PullRequest
6 голосов
/ 16 июля 2009

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

Я пытаюсь настроить систему входа в систему, используя переменные сеанса PHP.Я могу установить переменную, и иногда они работают, но иногда они исчезают.Нажатие на ссылки иногда заставит их вернуться.

Мой сайт

Войти с помощью

имя пользователя: проверить пароль: test

Есть var_dumps из session_id и$_SESSION наверху.

Нажмите Домой.Если переменные сеанса исчезнут, нажмите home (может занять до 10 раз), чтобы увидеть информацию о сеансе.Нажмите на другую навигацию, и иногда информация о сеансе появляется, а иногда нет.

Вот код сеанса в верхней части моего файла шаблона.

<?php
session_start();

require './classes/DBInterface.php';
$db = new DBInterface();

if($_REQUEST['submit']  ==  'Login') {
    $username=$_POST['username'];
    $password=$_POST['password'];

    echo '-- login -- '.$username;
    $rs = $db->verify($username,$password,"admin",0);
    $admin = $rs->current();
    if ($rs->valid()) {
        $_SESSION['username'] = $username;
    }
}

echo ' -- session id -- ';
var_dump(session_id());
echo ' -- session var -- ';
var_dump($_SESSION);

Я используюPHP5.

Ответы [ 3 ]

4 голосов
/ 16 июля 2009

Если вы используете startlogic (кажется, вы?) Для своего хостинга, вы пытались делать то, что они говорят в их FAQ: http://www.startlogic.com/knowledgebase/read_article.bml?kbid=600

Они указывают это:

Для запуска сессий PHP, включите следующий код в верхней части любого PHP скрипт, который использует сессии: session_save_path ("ваш домашний каталог путь "/ cgi-bin / tmp); session_start ();

Может быть, это поможет? Особенно, если они используют какой-то балансировщик нагрузки, который балансирует / tmp, но не ваш домашний каталог?

2 голосов
/ 16 июля 2009

Если вы используете установку с балансировкой нагрузки, возможно, только 1 из N серверов имеет правильные данные сеанса.

По умолчанию данные сеанса хранятся в файловой системе.
За сеанс файл сохраняется в / tmp / и начинается с "sess", за которым следует session_id

1 голос
/ 16 июля 2009

Вы абсолютно уверены, что до этого никогда ничего не вызывали? Я знаю, что session_start () изменяет заголовки, и кроме этого, не уверен, почему это не работает.

Продолжите и включите отчеты об ошибках в верхней части скрипта, прямо перед вызовом session_start (), и посмотрите, как это помогает отследить это:

error_reporting(E_ALL ^ E_NOTICE);
ini_set('display_errors',1);
session_start()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...