2011-01-27 3 views
3

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

<?php 
session_start(); 

$_SESSION[] = 'Hi'; 

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

Это печатает

Array 
(
    [0] => Hi 
) 

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

<?php 
session_start(); 

$_SESSION[] = 'There!'; 

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

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

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

я не прав?

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

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

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

+0

вы правы :) – arnaud576875

+1

Лучший учитель опыт. Это достаточно простой вопрос, который вы могли бы просто попробовать ... – NotMe

+1

Почему бы не проверить его? –

ответ

5

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

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

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

+0

Да, они отличаются от обычных массивов. Я не знал этого ... может быть, потому что я использовал это в более сложный путь (массив массива ...). Спасибо! – Francesco

0

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

0

Нет, это должно сработать. На самом деле, если вы просто перезагрузили файл1, вы просто получите серию записей «Привет», «Привет», «Привет» и т. Д..

+0

Если я перезагружу file1.php, я получаю каждый раз Array ([0] => Hi). Мне интересно, почему – Francesco

+0

0 останется Hi до тех пор, пока сессия не будет потеряна, посмотрите на 1,2,3 print_r ($ _ SESSION) –

+0

Если все, что вы получаете, это одна запись, то ваша сессия не сохраняется по запросам , Убедитесь, что cookie сеанса корректно пересылает сервер-> вы-> сервер между запросами каждой страницы. Если вы каждый раз получаете другой идентификатор сеанса, то это новый пустой сеанс, который объясняет, почему существует только один «Привет» –

0

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

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

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

Array 
(
    [0] => hi 
) 

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

Array 
(
    [0] => there! 
) 

с тем же уведомлением. просто ответьте на свой вопрос, вы ошибаетесь :). Если вы добавили индексы («поздороваться» и «встретиться» соответственно) в переменной сеанса, это будет выход на странице 1:

Array 
(
    [greet]=> hi  
) 

и когда вы идете на file2.php вы бы:

Array 
(
    [greet] => hi 
    [meet] => there! 
) 
+0

Это просто пример, который я сделал, потому что у меня возникло странное поведение сеанса – Francesco

-1

file1:

<?php 
session_start(); 

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

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

That prints 
Array 
(
    [0] => Hi 
) 

И file2.PHP, который похож на file1, но другой индекс сессии

<?php 
session_start(); 

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

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

Now this prints 
Array 
(
    [0] => Hi 
    [1] => There! 
) 
+0

Это не работает :(Кажется, что если я использую числовые индексы, такие как 0,1 или даже «0», «1», сеанс не но если я использую индекс как «ноль», «один», кажется, что все работает. Любые идеи? – Francesco

Смежные вопросы