Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: не сохраняются переменные сессии???
 
 автор: Alex Boxgorn   (24.06.2007 в 07:22)   письмо автору
 
 

Помогите пожалуйста с проблемой. Я тестирую сайты созданные мной по Денвером (локально). Но при очистке папки HOME от лишних директорий и после удаления одной из баз данных перестали передаваться переменные сессии $_SESSION["id"].
Все работает а $_SESSION[] не передаются.
Что я мог снести?

   
 
 автор: sim5   (24.06.2007 в 07:40)   письмо автору
 
   для: Alex Boxgorn   (24.06.2007 в 07:22)
 

Папки home и базы данных к сессии отношения не имеют. Сессии Денвер (по умолчанию) пишет в папку tmp, которая лежит в корне папке сервера. Все настройки касаемые сессии неходятся в файле php.ini.

   
 
 автор: Alex Boxgorn   (24.06.2007 в 07:50)   письмо автору
 
   для: sim5   (24.06.2007 в 07:40)
 

А какой параметр в этом файле может повлиять на данные переменные? Я же ничего не менял в настройках. Только была снесена вся БД по неосторожности, вместо всех таблиц в БД кроме одной. После этого все и началось.

   
 
 автор: sim5   (24.06.2007 в 07:58)   письмо автору
 
   для: Alex Boxgorn   (24.06.2007 в 07:50)
 

Ну трудно предположить, но... Зайдите в папку tmp и удалите все записи сессий, которые там есть. Сессия ваше стартуется в каком-то вашем скрипте, например index.php. Запускайте свой скрипт, и посмотрите - создана ли при этом сессия в папке tmp. Если сессия создана, значит сами сессии работают. А что касается непосредственно какой-то переменной сессии, то я не знаю откуда вы непосредственно берете, если она у вас хранилась в БД, то после сноса таблицы вы ее и не видите, НО... У вас же скрипт в таком случае, при обращении к несуществующей таблице работать не будет, вы ведь должны в этом случае получить сообщение об ошибке?

   
 
 автор: Alex Boxgorn   (24.06.2007 в 11:37)   письмо автору
 
   для: sim5   (24.06.2007 в 07:58)
 

Файлы сессий создаются, но я так понимаю в них ничего не пишется. я использую только переменные $_SESSION[] и ничего в базе не храню. Я уже начисто снес Денвер и установил новый, но проблема осталась.
От чего так вдруг перестали сохраняться переменные не пойму.
С БД все работает корректно. Все таблицы видны из скриптов и запросы выполняются корректно.
Что делать, ума не приложу.

   
 
 автор: bronenos   (24.06.2007 в 11:40)   письмо автору
 
   для: Alex Boxgorn   (24.06.2007 в 11:37)
 

сессию начинаете?
или вы после удаления папок не изменяли код?

   
 
 автор: Alex Boxgorn   (24.06.2007 в 11:49)   письмо автору
 
   для: bronenos   (24.06.2007 в 11:40)
 

все файлы учавствующие в авторизации юзера используют начальную проверку авторизации

error_reporting(E_ALL & ~E_NOTICE);
require_once("func_mysql_connect.php"); //тут если что выводится ошибка об невозможности связи с БД
session_start();
$user=$_SESSION["user"];

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

   
 
 автор: sim5   (24.06.2007 в 12:10)   письмо автору
 
   для: Alex Boxgorn   (24.06.2007 в 11:49)
 

А $_SESSION["user"] хоть равна чему либо? Проверьте
$_SESSION["user"]="SET";
echo $_SESSION["user"];

   
 
 автор: Alex Boxgorn   (24.06.2007 в 16:28)   письмо автору
 
   для: sim5   (24.06.2007 в 12:10)
 

проверил - переменная не установлена говорит.
функция isset($_SESSION["user"] )=ложь

   
 
 автор: sim5   (24.06.2007 в 16:57)   письмо автору
 
   для: Alex Boxgorn   (24.06.2007 в 16:28)
 

Если вы хотите записать в сессию, то просто пишите:
$_SESSION["user"] = что вам надо.
Проверить надо запись, значит пишите if (isset($_SESSION["user"] )) ваши действия.
Если у вас Денвер по умолчанию, если вы ничего не меняли в настройках, то:
$_SESSION["user"]="ПРОВЕРКА";
echo $_SESSION["user"];
Выведет вам ПРОВЕРКА. Вы это проверяли?

   
 
 автор: Alex Boxgorn   (24.06.2007 в 18:09)   письмо автору
 
   для: sim5   (24.06.2007 в 16:57)
 

ну естественно проверял. А как же я тогда узнал, что переменная теряется?
Делал все тоже самое что вы и написали.
А еще вопрос, Денвер не оставляет свои файлы еще где-нибудь, кроме как в папке Webservers?
В принципе, после сноса папки webservers с дистрибутивом Денвера все должно вылечиться.
А настройки эксплоэра на хранение переменных не может влиять?

   
 
 автор: sim5   (24.06.2007 в 18:38)   письмо автору
 
   для: Alex Boxgorn   (24.06.2007 в 18:09)
 

Папка Webservers - папка установки Денвера по умолчанию, а путь сессий по умолчанию в php.ini /tmp, то есть сессии хранятся в папке Webservers/tmp и нигде более. Браузер к этому отношения не имеет.
Если вы Делал все тоже самое, но нет вывода на экран, и при этом Денвер и php.ini не подвергались экзекуции, то я не знаю что вам и сказать. Единственной проблемой со сессиями у меня было то, что сессия создавалась ТОЛЬКО ОДНА за все время сеанса работы Денвера. Причиной была ХР. Если вы запускаете отдельный файл, например, test.php, в котором содержится только:

<?
session_start
();
$_SESSION["user"]="TEST";
echo 
$_SESSION["user"];
?>

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

   
 
 автор: Osipov   (24.06.2007 в 16:51)   письмо автору
 
   для: Alex Boxgorn   (24.06.2007 в 07:22)
 

А не может быть у вас session_start после отправки заголовков? У вас стоит хороший error_reporting, но для того чтобы точно увидеть все ошибки, нужно ещё, на всякий случай, написать

ini_set("display_errors",true);

Перенесите session_start в самое начало --- так надёжнее (после error_reporting и ini_set)
Да, и вы уверены, что попытка session_start после отправки заголовков --- это не notice? Может уберёте &~E_NOTICE, на всякий случай.

   
 
 автор: Alex Boxgorn   (24.06.2007 в 19:11)   письмо автору
 
   для: Osipov   (24.06.2007 в 16:51)
 

Тестирование кода указанного ниже и помещенного в файл test3.php привело к выводу слова TEST. Файл сессии в папке TEMP создался и в нем появилась запись user|s:4:"TEST";
<? 
session_start
(); 
$_SESSION["user"]="TEST"
echo 
$_SESSION["user"]; 
?>

Далее я довел ситуацию до моего случая я сделал файл test3.php с кодом
<? 
session_start
(); 
$_SESSION["user"]="TEST"
if(isset(
$_SESSION["user"])){ header("location: test7.php");} 
?> 

соответственно файл test7.php с кодом
<? 
session_start
(); 
$k=$_SESSION["user"];
echo 
$k
?>

После запуска файла test3.php вывелось сообщение:
Notice: Undefined index: user in z:\home\osdnsk_ru\www\test7.php on line 3
А созданный файл сессии пуст.

   
 
 автор: sim5   (24.06.2007 в 19:40)   письмо автору
 
   для: Alex Boxgorn   (24.06.2007 в 19:11)
 

У меня все работает, естественно и ваши тесты не вызовут осложнений. Значит у вас что-то с настройками, либо проблемы с самим пакетом Денвера.

   
 
 автор: Alex Boxgorn   (24.06.2007 в 19:45)   письмо автору
 
   для: sim5   (24.06.2007 в 19:40)
 

Спасибо всем за помощь! Буду искать где ошибка, работать же как-то надо ;-(((

   
 
 автор: Alex Boxgorn   (24.06.2007 в 21:30)   письмо автору
 
   для: Alex Boxgorn   (24.06.2007 в 19:45)
 

В общем нашел я в чем дело было...
Все оказалось очень просто.
Я придерживаюсь следующего правила - если ошибка появилась после каких-либо изменений, то нужно вернуть все в такой вид, который был до изменений.
У меня все сайты лежали в папках типа home/rtv.ru/www/..... и все работало.
Но у меня часто возникали проблемы при проверке выгруженного сайта в интернете при включенном виртуальном сервере. Т.е. и в интернете адрес сайта www.rtv.ru и на локальном сервере тоже самое www.rtv.ru. Для того чтобы не путаться я и переименовал локальные адреса сайтов в вид www.rtv_ru и после этого начались проблемы.
Я во-первых переустановил Денвер еще раз, но не на прежнюю букву виртуального диска Z:\ как раньше было, а под новую K:\ чтобы если остались файлы от старого денвера с настройками, то они бы не мешали новому Денверу. Потом проверил вышеуказанный код из двух PHP файлов test3.php и test7.php и все заработало.
Потом я проверил свой сайт сначала с именем домена www.rtv_ru и тест перестал работать, после переименования на www.rtv.ru тест корректно отработал.
Так что вот такие глюки затормозили мою работу на 1,5 дня.
Информация эта для всех тех, кто возможно сталкивался с такой проблемой и для всех тех, кто учится на чужих ошибках и не совершает их повторно.
Всем удачи!!!

   
 
 автор: Trianon   (24.06.2007 в 23:31)   письмо автору
 
   для: Alex Boxgorn   (24.06.2007 в 21:30)
 

Переименовывать каталоги денвера действительно весьма рискованная процедура.
Для того чтобы не путаться, можно применить следующий способ.
один из доменов (site.ru и www.site.ru) пустить под денвер, а другой - под реальный сайт.
В этом случае, браузеру будут видны оба варианта.

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования