глупый «важный» вопрос о массиве php $ _SESSION - PullRequest
3 голосов
/ 27 января 2011

У меня есть 2 файла, которые помещают что-то в массив $ _SESSION. file1.php

<code><?php
session_start();

$_SESSION[] = 'Hi';

echo '<pre>';
print_r($_SESSION);
echo '
';

Это печатает

Array
(
    [0] => Hi
)

И file2.php, который похож на file1

<code><?php
session_start();

$_SESSION[] = 'There!';

echo '<pre>';
print_r($_SESSION);
echo '
';

Я предполагаю сначала перейти к файлу1, а затем перейти к файлу2. Печать $ _SESSION в file2 должна вывести

Array
(
    [0] => Hi
    [1] => There!
)

я не прав?

Я должен упомянуть, что получил уведомление: Неизвестный пропуск цифровой клавиши 0 в Неизвестном в строке 0. И register_globals в моем php.ini установлен на Off.

Как я вижу в комментариях для кого-то из вас, file2 печатает массив из 2 элементов, а для кого-то другого (как я) элементы 'hi' теряются. Похоже, это происходит, но не для Marc B, только если мы используем число в качестве индекса массива сеанса, а не строку.

Для Марка Б сеанс ведет себя так, как я ожидал. Можете ли вы опубликовать свой php.ini здесь? Так я могу сравнить твои с моими?

Ответы [ 5 ]

5 голосов
/ 28 января 2011

Суперглобальные переменные типа $_SESSION не являются обычными массивами.Вы должны хранить массив внутри $_SESSION, например:

файл 1: $_SESSION['foo'][] = 'Hi!';

файл 2: $_SESSION['foo'][] = 'there';

0 голосов
/ 27 января 2011

file1:

<code><?php
session_start();

$_SESSION['0'] = 'Hi';

echo '<pre>';
print_r($_SESSION);
echo '
';Это печатает Array ([0] => Hi)

И file2.php, который похож на file1, но отличается индексом сеанса

<code><?php
session_start();

$_SESSION['1'] = 'There!';

echo '<pre>';
print_r($_SESSION);
echo '
';Теперь это печатает Array ([0] => Hi [1] => There!)
0 голосов
/ 27 января 2011

Нет, это должно работать.На самом деле, если вы просто продолжаете перезагружать файл1, вы просто получите ряд записей массива "Hi", "Hi", "Hi" и т.

0 голосов
/ 27 января 2011

Есть ли конкретная причина, по которой вы сделали

$_SESSION[]='Hi' instead of $_SESSION["Greet"]='Hi'?

Я проверил ваш код.когда я запустил file1.php, у меня есть следующее:

Array
(
    [0] => hi
)

со следующим уведомлением: Неизвестный пропуск цифровой клавиши 0 в Неизвестный в строке 0, и после этого я перешел к файлу 2.php у меня есть следующее:

Array
(
    [0] => there!
)

с таким же уведомлением.Проще говоря, чтобы ответить на ваш вопрос, вы не правы :).Если вы добавили индексы («greet» и «meet» соответственно) в переменную сеанса, это будет вывод на стр. 1:

Array
(
   [greet]=> hi      
)

, и когда вы перейдете к file2.php, вы получите:

Array
(
  [greet] => hi
  [meet] => there!
)
0 голосов
/ 27 января 2011

Вы не даете $_SESSION соответствующий ключ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...