Почему мой массив SESSION в порядке на одной странице, но пустой на другой?

У меня есть класс, который устанавливает различные переменные сеанса. После того, как я установил переменную сеанса, я делаю дамп var SESSION и получаю вывод их всех. пока все хорошо. Затем я перехожу на другую страницу.

session_start(); // i call this right after opening the php tag
var_dump($_SESSION); // i call this after setting the variables

а в этот раз пусто?

Настройка моих сессий

while( $row = sqlsrv_fetch_array( $stmt, SQLSRV_FETCH_ASSOC))
    {
           $_SESSION['atid'] = $row['autotaskid'];
           $_SESSION['bmsid'] = $row['bmsid'];
           $_SESSION['shavlikid'] = $row['shavlikid'];
           $_SESSION['cpid'] = $row['cpid'];
    }

Попытка использовать переменные на другой странице

$autotaskid = $_SESSION['atid'];
    $tsql = "SELECT COUNT(tblBackupArchive.StatusID) AS total, tblBackupArchive.StatusID ".
            "FROM tblBackupArchive INNER JOIN ".
            "tblBackup ON tblBackupArchive.BackupID = tblBackup.BackupID ".
            "GROUP BY tblBackupArchive.StatusID, tblBackup.ClientID ".
            "HAVING (tblBackup.ClientID = " . $autotaskid . ")";    

Результаты в

Undefined index: atid in C:\Program File...

Я удостоверился, что я запускаю start_session (); Функция до запуска любого другого кода на каждой странице, которая их использует.

Еще один важный момент: страница php, которая вызывает метод установки переменных внутри iframe. когда я открываю страницу в новой вкладке / окне, она устанавливает сессии правильно. Это похоже на то, что в главном окне есть переменные сеанса, а затем каждый iframe хранит его отдельно.

Есть идеи?

Билли

Ответы на вопрос(5)

Решение Вопроса

Есть идеи?

Да. Вы должны научиться отлаживать свой код.
Как вы видите, на ваш вопрос невозможно ответить из догадок. Итак, пришло время для ручной работы.

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

затем создайте сценарий тестирования, чтобы увидеть, работают ли ваши сеансы

<? 
session_start(); 
if (!isset($_SESSION['counter'])) $_SESSION['counter']=0;
echo "Refreshed ".$_SESSION['counter']++." times.<br>
<a href=".$_SERVER['PHP_SELF'].'?'.session_name().'='.session_id().">refresh</a>"; 
?>

если это работает, заставьте это использовать куки

<? 
session_start(); 
if (!isset($_SESSION['counter'])) $_SESSION['counter']=0;
echo "Refreshed ".$_SESSION['counter']++." times.<br>
<a href=".$_SERVER['PHP_SELF'].">refresh</a>"; 
?>

если это работает тоже, вы должны проверить свой код.
Распечатывать переменные, сокращать код и т. Д.

 iamjonesy06 окт. 2010 г., 10:41
Я забыл упомянуть, что приложение php доступно через iframe. Когда я делаю то же самое в новом окне, все в порядке. Существует ли различный набор переменных сеанса для каждого iframe?
 kelunik29 окт. 2013 г., 11:34
@YourCommonSense Почему вы откатили это?
 Your Common Sense06 окт. 2010 г., 11:22
@Jonesy iframes не имеет ничего общего с PHP или сессиями. Сессии связаны с доменом.
 Your Common Sense05 окт. 2010 г., 10:16
@Джонси, код, который ты выложил здесь, в порядке. Хотя я бы сделал это с одним утверждением$_SESSION['savedata'] = $row; а затем использовать его как$autotaskid = $_SESSION['savedata']['atid']; иногда это может помочь. если нет - вы должны добавить var_dump ($ _ SESSION); в максимально возможном количестве мест
 kelunik29 окт. 2013 г., 15:45
@YourCommonSense Это не только стиль кода, он требуетshort_open_tag быть включенным.
 Your Common Sense29 окт. 2013 г., 15:34
@kelunik, потому что это законный код PHP, и это только вопрос стиля кодирования. Пожалуйста, не редактируйте мои ответы, чтобы удовлетворить ваши личные вкусы. Любая синтаксическая ошибка или любое другое существенное исправление по-прежнему приветствуются.
 Steve Claridge04 окт. 2010 г., 23:21
+1 научи человека ловить рыбу ....
 Your Common Sense29 окт. 2013 г., 15:49
@kelunik Что угодно. Я буду очень признателен, если вы оставите мой скромный ответ в покое.
 iamjonesy05 окт. 2010 г., 09:40
привет спасибо за ваши предложения Я добавил встречный тест, который вы опубликовали. Интересно то, что после попытки этого теста, затем перейдя на страницу, где установлены мои сеансы, затем перейдя на другую страницу, вместо того, чтобы видеть массив сессий пустым, я теперь вижу счетчик. Проблема должна быть связана с кодом, устанавливающим сеансы. Я устанавливаю сессии в методе, используемом только первой страницей. может быть, они уничтожаются после использования?

Если ты звонишьsession_close() где вы должны быть, тогда вы случайно уничтожаете сеанс? Возможно, несколько слишком многоsession_destroy() звонки?

И несколько слишком много, я имею в виду один.

Удостоверься что:

Вы выполняетеsession_start() прежде чем установить или получить переменную сеанса. (Если сервер настроен на автозапуск сеансов, в этом нет необходимости.)Оба сценария живут в одном (суб) домене. (Недостаточно, чтобы страницы находились на одном сервере для совместного использования сеанса, они также должны принадлежать одному и тому же (суб) домену.)

Исходя из вашего первого блока кода, кажется, что вы звонитеsession_start() после Вы пытались установить$_SESSION переменные. Вы должны позвонитьsession_start() первый! Я могу ошибаться, в этом случае я прошу прощения. Но на основании приведенного выше фрагмента кода это может стать вашей проблемой!

 chigley04 окт. 2010 г., 18:30
В каком случае я не уверен! Может быть связано с вашей средой. Я никогда раньше не работал с локальным PHP на Windows.
 iamjonesy04 окт. 2010 г., 18:26
извините, что только я сбил с толку людей, я вырезал там код. Я на самом деле вызываю session_start ДО чего-либо еще. Сразу после открытия тега php. Спасибо хоть

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

То есть Ваш код может основываться на идентификаторах сеансов, хранящихся в файлах cookie, но эта опция отключена (см.php.ini).

В качестве меры отладки вы можете использовать «прозрачные идентификаторы сеанса» (они объединяются с любой ссылкой), но не для производственного кода.

 iamjonesy05 дек. 2010 г., 14:45
Привет, я отправил этот вопрос некоторое время назад и в итоге переустановил Wamp. Я столкнулся с этим снова и начал новый вопрос. Пожалуйста, вы можете взглянуть на это?stackoverflow.com/questions/4358525/...

Ваш ответ на вопрос