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

У меня есть класс, который устанавливает различные переменные сеанса. После того, как я установил переменную сеанса, я делаю сброс 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 сохраняет его отдельно.

Есть идеи?

Билли

Есть идеи?

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

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

     <? 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>"; ?> 

если он работает, попробуйте использовать файлы cookie

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

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

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

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

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

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

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

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

Убедись, что:

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