2009-07-16 3 views
6

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

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

My site

Войти с

пользователя: тест пароль: тест

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

Нажмите дальше. Если переменные сеанса исчезают, нажмите на кнопку «домой» (может занять до 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.

ответ

4

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

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

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

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

+0

Спасибо. Мне никогда не приходило в голову, что это может быть хостинг. Теперь я возвращаю весь код, который я разорвал, пытаясь упростить мою проблему. – Emily

+0

Ну, это была интересная проблема ^^ Удачи :-) –

2

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

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

1

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

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

error_reporting(E_ALL^E_NOTICE); 
ini_set('display_errors',1); 
session_start() 
Смежные вопросы