[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Перестала работать сессия!
rubiroide
Ничего не трогал, но сессия вдруг перестала работать. У меня сохранялся массив $metro при первом посещении страницы и считывался из сессии при последующих посещениях (через get post передать массив не смог, решил писать его в сессию). Все вроде работало, как вдруг перестало считываться из сессии. Вот код:
// Инициируем сессию
session_start();
if ($action != 1)
{
unset($_SESSION['metro']);
$_SESSION['metro'] = $metro;
}
else
{
$metro = $_SESSION['metro'];
}



Спустя 8 минут, 10 секунд (15.04.2010 - 14:48) ApuktaChehov написал(а):
Цитата (rubiroide @ 15.04.2010 - 14:40)
У меня сохранялся массив $metro при первом посещении страницы и считывался из сессии при последующих посещениях

Если имеется в виду, что пользователь ушел с сайта, а потом снова пришел, то у вас проблема не с сессиями, а с куками.

Спустя 10 минут, 47 секунд (15.04.2010 - 14:59) rubiroide написал(а):
Цитата (ApuktaChehov @ 15.04.2010 - 11:48)
Цитата (rubiroide @ 15.04.2010 - 14:40)
У меня сохранялся массив $metro при первом посещении страницы и считывался из сессии при последующих посещениях

Если имеется в виду, что пользователь ушел с сайта, а потом снова пришел, то у вас проблема не с сессиями, а с куками.

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

Спустя 5 минут, 34 секунды (15.04.2010 - 15:04) rubiroide написал(а):
Как можно передать массив с одной страницы на другую? Может есть альтернативный способ?

Спустя 1 час, 25 минут, 7 секунд (15.04.2010 - 16:29) ApuktaChehov написал(а):
Определитесь, с одной страницы на другую во время одного посищения сайта или чтобы информация хранилась, даже если пользователь ушел с сайта.

Спустя 4 часа, 2 минуты, 21 секунда (15.04.2010 - 20:32) rubiroide написал(а):
Цитата (ApuktaChehov @ 15.04.2010 - 13:29)
Определитесь, с одной страницы на другую во время одного посищения сайта или чтобы информация хранилась, даже если пользователь ушел с сайта.

Во время ОДНОГО перехода.
Передал бы через get, но не знаю как МАССИВ запихать.

Спустя 2 минуты, 29 секунд (15.04.2010 - 20:34) ApuktaChehov написал(а):
Тогда сессии должны работать.
Убедитесь, что session_start(); есть в НАЧАЛЕ каждого скрипта который использует сессии.

Спустя 18 минут, 11 секунд (15.04.2010 - 20:52) rubiroide написал(а):
Цитата (ApuktaChehov @ 15.04.2010 - 17:34)
Тогда сессии должны работать.
Убедитесь, что session_start(); есть в НАЧАЛЕ каждого скрипта который использует сессии.

Есть! Сессии использую только на одной странице, переход осуществляется на ту же страницу, меняется только переменная $page - номер страницы. Другие переменные я передаю через get. А массив как передать не знаю, решил через сессию. Может есть альтернативный способ?

Спустя 2 минуты, 8 секунд (15.04.2010 - 20:54) ApuktaChehov написал(а):
Сессии должны работать. Проверьте настройки php.

И покажите полный код.

Спустя 13 минут, 10 секунд (15.04.2010 - 21:08) rubiroide написал(а):
Цитата (ApuktaChehov @ 15.04.2010 - 17:54)
Сессии должны работать. Проверьте настройки php.

И покажите полный код.

Самая первая страница с формой, список в который добавляю станции метро для поиска:
<SELECT id=metro ondblclick=del_m();
style="WIDTH: 190px" size=10
name="metro[]" multiple></SELECT>

Страница с результатами:
<?
session_start();
include "config.php";
$action = $_GET['action'];
trim($action);
$metro = $_GET['metro'];
$page = $_GET['page'];
if (empty($page))
$page = 1;

if ($action != 1)
{
unset($_SESSION['metro']);
$_SESSION['metro'] = $metro;
}
else
{
$metro = $_SESSION['metro'];
}
?>

Поясню словами, возможно моя логика неверна.
При первом заходе $action!=1 поэтому записываем массив в сессию (перед этим удаляю что там было)
При последующих заходах сюда ($page = 2 или 3...) $action==1 поэтому считываю массив из сессии. Переходы делаю по одной странице и разными $page.
Надо передавать массив при переходах!

Спустя 8 минут, 28 секунд (15.04.2010 - 21:16) ApuktaChehov написал(а):
Вы проверяли что в массиве $_SESSION происходит?

И еще. Как я уже сказал, session_start(); должна быть В НАЧАЛЕ скрипта. Т.е. на строчке №1

А что с селектом такое страшное? Его его опции?

P.S. Используйте теги оформления кода, пожалуйста!

Спустя 9 минут, 9 секунд (15.04.2010 - 21:25) rubiroide написал(а):
Цитата (ApuktaChehov @ 15.04.2010 - 18:16)
Вы проверяли что в массиве $_SESSION происходит?

И еще. Как я уже сказал, session_start(); должна быть В НАЧАЛЕ скрипта. Т.е. на строчке №1

А что с селектом такое страшное? Его его опции?

P.S. Используйте теги оформления кода, пожалуйста!

Массив в $_SESSION['metro'] вроде сохраняется. Я попробовал вывести после скрипта

echo count($_SESSION['metro']);


После сохранения (первый заход $action != 1) количество показывает.
При втором заходе ($action == 1) должно произойти считывание

$metro = $_SESSION['metro'];


В результате количество элементов массива = 0.

Можно ли как-нибудь проверить когда выпадает содержимое $_SESSION['metro'];

Насчет селекта не понял:(

Спустя 2 минуты, 43 секунды (15.04.2010 - 21:28) ApuktaChehov написал(а):
echo count($_SESSION['metro']);

Это неправильно. Я имел в виду, что нужно посмотреть, что в массиве, а не сколько там элементов.
print_r($_SESSION['metro']);


И покажите ВЕСЬ код, включая форму, вообщем, ВСЕ что есть!

Спустя 8 минут, 53 секунды (15.04.2010 - 21:37) rubiroide написал(а):
Цитата (ApuktaChehov @ 15.04.2010 - 18:28)
echo count($_SESSION['metro']);

Это неправильно. Я имел в виду, что нужно посмотреть, что в массиве, а не сколько там элементов.
print_r($_SESSION['metro']);


И покажите ВЕСЬ код, включая форму, вообщем, ВСЕ что есть!

Вот что при первом заходе:

Array ( [0] => 7 [1] => 134 [2] => 136 [3] => 35 [4] => 117 [5] => 48 [6] => 137 [7] => 75 [8] => 87 [9] => 12 [10] => 132 [11] => 122 [12] => 100 [13] => 28 [14] => 52 [15] => 133 [16] => 71 [17] => 8 [18] => 118 [19] => 175 [20] => 174 [21] => 33 [22] => 103 [23] => 34 [24] => 74 [25] => 32 [26] => 73 [27] => 49 [28] => 10 [29] => 31 [30] => 9 [31] => 119 [32] => 72 [33] => 53 [34] => 30 [35] => 120 [36] => 159 [37] => 158 [38] => 161 [39] => 160 [40] => 29 [41] => 121 [42] => 88 [43] => 11 )

При следующем пусто! Массив удаляется из сессии или я его неправильно читаю!

Спустя 3 минуты, 36 секунд (15.04.2010 - 21:40) rubiroide написал(а):
Прикреплю файлы с кодом. Это форма (весит 153К, сжал).

Спустя 1 минута, 53 секунды (15.04.2010 - 21:42) rubiroide написал(а):
Это скрипт

Спустя 10 минут, 34 секунды (15.04.2010 - 21:53) ApuktaChehov написал(а):
Я не знаю зачем вы мне прислали всю верстку.
Я просил, только форму с которой отправляются данные и сам скрипт.
Ну да ладно.

Короче. Если при первом все хорошо, а при следующей пусто, тогда у Вас срабатывает вот этот участок кода:

if ($action != 1)
{
unset($_SESSION['metro']);
$_SESSION['metro'] = $metro;



Проведите трасировку, проверьте когда у Вас и что срабатывает.
Банально поставьте перед unset($_SESSION['metro']); - echo(123);
Увидите когда срабатывает эта часть кода.

Спустя 7 минут, 54 секунды (15.04.2010 - 22:01) rubiroide написал(а):
Цитата (ApuktaChehov @ 15.04.2010 - 18:53)
Я не знаю зачем вы мне прислали всю верстку.
Я просил, только форму с которой отправляются данные и сам скрипт.
Ну да ладно.

Короче. Если при первом все хорошо, а при следующей пусто, тогда у Вас срабатывает вот этот участок кода:

if ($action != 1)
{
unset($_SESSION['metro']);
$_SESSION['metro'] = $metro;



Проведите трасировку, проверьте когда у Вас и что срабатывает.
Банально поставьте перед unset($_SESSION['metro']); - echo(123);
Увидите когда срабатывает эта часть кода.

НЕА! Проверил:

  if ($action != 1)
{
unset($_SESSION['metro']);
$_SESSION['metro'] = $metro;
echo "perzap";
}
else
{
$metro = $_SESSION['metro'];
echo "zap";
}

print_r($_SESSION['metro']);


Этот кусок не срабатывает, текст perzap во второй раз не появляется (в первый раз да)!

Спустя 1 минута, 58 секунд (15.04.2010 - 22:03) rubiroide написал(а):
А можно запихать массив в get? Я использую сессии потому что не смог другим способом передать массив при переходе (причем переход на ту же самую страницу)

Спустя 8 минут, 8 секунд (15.04.2010 - 22:11) rubiroide написал(а):
Не примите за рекламу, вот проблемная страница: http://www.arenda-liferealty.ru/ofis.php
При выборе станций метро они в первый раз передаются (через массив), а потом нет.

Спустя 9 минут, 41 секунда (15.04.2010 - 22:21) ApuktaChehov написал(а):
Весь код я не могу просмотреть он большой.

Но дам несколько советов.

Убедитесь, что нигде в коде $_SESSION['metro'] не используется.
Для теста сессий запишите в начале в сессию что-нибудь, а потом на каждой странице выведите эту запись. Проследите что сессия не теряется.

Уберите unset($_SESSION['metro']); и попробуйте без этого. Если все также. То попробуйте поработать, к примеру с $_SESSION['metro1'];

Каким образом данные передаются, обычная форма и с помощью JS?

Мне тяжело Вам помогать, потому как кода много.

Спустя 40 минут, 47 секунд (15.04.2010 - 23:01) rubiroide написал(а):
Проблему решил. Спасибоза помощь. Просто перенес код

  if ($action != 1)
{
$metro = $_GET['metro'];
$_SESSION['metro'] = $metro;
}
else
{
$metro = $_SESSION['metro'];
}


поближе к session_start(); и все заработало.

ВЫВОД: код работы с сессией не надо разбрасывать по скрипту!!!!!!

P.S. Скрипт неделю назад работал и в разбросанном виде.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.