Почему мой массив SESSION в порядке на одной странице, но пустой на другой? - PullRequest
0 голосов
/ 04 октября 2010

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

6 голосов
/ 05 октября 2010

Есть идеи?

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

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

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

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

2 голосов
/ 05 декабря 2010

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

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

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

1 голос
/ 04 октября 2010

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

0 голосов
/ 23 августа 2013

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

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

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

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

...