[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Сессия.
T_Mur
Добрый день. Заранее извиняюсь, если пишу не в том разделе.
У меня есть следующая проблемка, развязаться с которой не могу по причине того, что не знаю даже, где искать.
Описываю проблему :

Делаю движок под сайт. Допустим , есть меню.
Допустим Вы уже зарегистрированы, нажимаете "войдите" и вводите логин и пароль. Конструкция входа такова, что скрипт связывается с БД, проверяет наличие такого пользователя по логину и паролю, и если проверка сходится, то в $_SESSION["login"] заносится логин человека, благодаря которому будут работать все остальные опции и т.д.
Но, выбрав в меню просмотр информации "Личные данные" , они , к сожалению, не отображаются , так как запрос на выборку данных о человеке у меня поставлен таким образом, что вытягивает данные по логину, т.е. :
SELECT *
FROM passengers
WHERE `login`='{$_SESSION["login"]}'

При этом мне показывает заложенную мной ошибку(в случае, если if(!$_SESSION["login"])) : "Вы не авторизированы".

Вот собственно и проблема. не знаю , почему оно не заносит при авторизации в $_SESSION["login"] значение.
А если быть точным, то на домашнем компьютере, при запуске скрипта на своем сервере , - все работает отлично, а вот когда файлы залил на хостинг - оно не работает. Тоесть, я все отладил , исправил все ошибки, всё проверил, - все как часы работало. А залил на хостинг, - от работоспособности не осталось и намека. вот не могу понять , где искать. Тоесть, подразумеваю, что скрипт у меня рабочий (раз на домашнем сервере работает) , тогда в чем проблема, почему не работает на хостинге ?
Заранее благодарен.

П.С. На локальном компьютере стоит : Apache+PHP 5.2.1+MySQL5.1.28+PHPMyADMIN.
На хостинге: Apache/2.2.16 + php5+ mysql-5.3.3 (управление также через PHPMyADMIN)




Спустя 3 часа, 54 минуты, 17 секунд (27.09.2010 - 20:58) inpost написал(а):
T_Mur
Не в ту глубь копаешь, проверь ошибки, убедись, что на всех страницах есть session_start. Далее простая проверка: на страницах делаешь echo $_SESSION['login']. (Попробуй с одинарными кавычками. Теперь мы знаем, либо вообще сессия не приходит благодаря echo, либо сам запрос не правильный. Выходя из этого положения ты сможешь найти ошибку. Если проделав СВОЙ АНАЛИЗ ты не сможешь определить, где ошибка (подчерну, ты пройдешь все пункты мои!!!), скидывай код сюда этой страницы (HTML, JS часть можешь вырезать, она там не нужна - если её конечно много)

Спустя 1 час, 49 минут, 41 секунда (27.09.2010 - 22:47) T_Mur написал(а):
inpost, благодарю за ответ !
Значит давай по пунктам:
1)session_start есть везде , где надо, причем до него никаких выводов нету (вообщем по всем правилам хеадер-подвоха);
2)Проверку c помощью включения echo делал до этого, потому и определил, что в $_SESSION["login"] ничего не заносится;
3) Запросы стопроцентов правильные, проверенные , их там пока всего три - добавление данных в БД, вытягивание данных оттуда и редактирование. Все по одному принципу. Ну и снова же , повторюсь, что они проверенные, рабочие. С БД работает отлично, когда вручную (без сессий проверял, на всякий случай);
4) Об одинарных кавычках не думал. Спасибо за подсказку. Проверил , - ничего не изменилось, ничего не помогло. С другой стороны, ключи массивов $_POST у меня тоже через двойные кавычки, и все нормально с ними . Печеньки тоже через двойные кавычки, тоже работают, а по смыслу, это однотипные массивы, так что проблема не в этом...

Вот перепробовал всё. Реально два дня морочусь. Уже "перекрутил" свой код до неузнаваемости (не в лучшую сторону), даже упростил немного (ради выяснения причины) , а оно все равно не хочет.

И ведь проблема-то... Скрипт работает на локальной машине !!!!!!! Тоесть на моем сервере все , как часы!!!!!

Я даже РНР.ini серверные смотрел, ничего подозрительного не нашел... вот голова кругом идет изза этого.

Это как у Задорнова, - шутка с рулеткой : "...секция забора - 120 см, а меряю рулеткой, - получается 110... оказалось жена заляпала краской отрезок между пятидесятым и шестидесятым сантиметром, вырезала их, эти 10 см, и склеила ... "

И все было бы смешно , если бы не было так грустно. Мозги заворачиваются.

Вообщем , привожу один блок, входа на сайт, и самое начало кода, дабы видели , где у меня сессии включаются:

<?
//ВКЛЮЧИМ СЕССИИ
session_start();

//ini_set("display_errors","off");

// >>> СЕКЦИЯ ДАННЫХ <<<
//CUT-CUT-CUT-CUT-CUT-CUT-CUT-CUT-CUT-CUT-CUT-CUT-CUT-CUT-CUT-CUT
//КУСОК КОДА ВЫРЕЗАН

// >>> СЕКЦИЯ ЛОГИКИ <<<

//БЛОК, ОТВЕЧАЮЩИЙ ЗА ПОДКЛЮЧЕНИЕ ПРОГРАММЫ К БД
//закомментированная ниже строка - параметры БД на хостинге
//$db_connection_result=mysql_connect("db4.ho.ua","*******","*******");
$db_connection_result=mysql_connect("localhost","T_Mur","*******");
if(!$db_connection_result)
{
$error="failed_connection_with_db";
}


//УКАЖЕМ БАЗУ ДАННЫХ, С КОТОРОЙ МЫ РАБОТАЕМ
//закомментированная ниже строка - параметры БД на хостинге
//mysql_select_db('********') or die ('Can\'t use ********* : ' . mysql_error());
mysql_select_db('********') or die ('Can\'t use ******** : ' . mysql_error());



//блок, который будет обрабатывать запрос входа пользователей на сайт
if($action=="enter")
{
$passenger_in_auth=$_POST;
//условие: если введены login и password
if($passenger_in_auth["login"] && $passenger_in_auth["password"])
{
//1. составим запрос к БД на поиск соответствующих значений
$zapros="
SELECT *
FROM passengers
WHERE `login` LIKE '{$passenger_in_auth["login"]}'
";
$authorization_data_address=mysql_query($zapros);
//если запрашивается несуществующий логин, - создадим массив
$login_for_authorization=Array();
$login_for_authorization=mysql_fetch_array($authorization_data_address);
//проверим правильность заполненных данных с полученными из БД
if($passenger_in_auth["login"]==$login_for_authorization["login"] and $passenger_in_auth["password"]==$login_for_authorization["password"])
{
//$_SESSION["login"]=$login_for_authorization["login"];
$_SESSION["login"]=$passenger_in_auth["login"];
$file_general="ind";
}
elseif($passenger_in_auth["login"]!=$login_for_authorization["login"] && $passenger_in_auth["password"]!=$login_for_authorization["password"])
{
$error="failed_authorization";
}
}

else
{
$error="empty_fields";
}
}

Спустя 36 секунд (27.09.2010 - 22:48) T_Mur написал(а):
Заранее благодарен за любой ответ и любую, оказанную Вами помощь!!!!!!!!!!!!!!!!!!!

Спустя 6 минут, 9 секунд (27.09.2010 - 22:54) inpost написал(а):
T_Mur
Вырежи все комментарии, поставь теги ПХП (тут в форме есть). Так будет легче читать код =) + не вижу я обращений к сессии.

У тебя на сервере вообще не работают сессии? Создай 2 чистых листа:
<?php session_start();
$_SESSION['login'] = "LALALA";
header("Location: page2.php");
?>


И вторую страницу:
<?php session_start();
echo $_SESSION['login'];
?>


Каков результат? Работает сессия?

Спустя 9 минут, 57 секунд (27.09.2010 - 23:04) T_Mur написал(а):
Примером из двух страниц выяснилось :

-на сервере работают сессии .

Полное написание <?php - не помогло...

... но ведь изза комментариев-то не может быть такой проблемы ????

Спустя 8 минут, 42 секунды (27.09.2010 - 23:13) T_Mur написал(а):
может выбросить полностью весь код ?
глянете ?

Спустя 3 минуты, 12 секунд (27.09.2010 - 23:16) inpost написал(а):
T_Mur
Я к тому, что не удобно читать, оформил бы нормально!
Смотри, сессии работают, значит всё нормально! Попробуй для себя написать этот скрипт ещё раз. Только в этот раз более внимательно и по этапно. Просто запомни, помогают до поры до времени, порой прийдется и на себя иногда понадеяться, вот удачный случай переписать и проверить каждый шаг.
Вот к примеру там, где строчка выглядит так:
$_SESSION["login"]=$passenger_in_auth["login"];
Следующей строкой через echo выведи параметры $passenger_in_auth["login"]; Может туда ничего не попало вообще?

Вот мог бы кинуть сюда ВЕСЬ КОД ОБОИХ СТРАНИЦ: где присваивается, и где используется. Единственные вещи: воспользуйся тегами PHP, и вырежи комментарии.

Спустя 5 минут, 43 секунды (27.09.2010 - 23:22) Ice написал(а):
вообще логика странная какая-то... мягко говоря.

Спустя 5 минут, 43 секунды (27.09.2010 - 23:27) T_Mur написал(а):
Ice , нет, ну ребята, я учусь этому, и то что у меня не все складно я и сам прекрасно помогаю. Потому и ломаю голову по поводу многочисленных своих идей ...

Подскажите, как бы сделать лучше, - буду рад за любую помощь rolleyes.gif

Спустя 40 секунд (27.09.2010 - 23:28) T_Mur написал(а):
все, спасибо! Пока-что морочить голову не буду , и загружать своими проблемами, и на том спасибо! Сделаю по Вашему совету ! Потом отпишусь!

..............................................

Только уясните мне один момент....
а почему у меня на локальном сервере работает?
Я этого никак не могу понять. Выходит пишу , проверяю и делаю отладку на своем компе, отталкиваюсь от полученных результатов, написал целую книжку кода с кучей подключенных страниц, а выгрузил , и ... облом . не работает . Ну как так может быть ? ?????

Спустя 1 минута, 46 секунд (27.09.2010 - 23:30) Ice написал(а):
display_errors On делал? смотрел?

Спустя 21 минута, 48 секунд (27.09.2010 - 23:52) inpost написал(а):
T_Mur
У меня бред похожий был, к примеру на денвере при получении $_GET параметров, я обращался к ним как к $_POST, и они работали =) А ещё не инициализировал, просто писал: echo $aaa; - тоже работало. А вот когда на сервер залил, тут то ошибки проявились. Теперь я вообще денвером не пользуюсь, сразу заливаю на сервер и смотрю работу скриптов. У меня ярлык на рабочем столе "Start Servers" пылью пропах =)
Вообщем, порой денвер сам решает за тебя проблемы, ты делаешь ошибки, а он понимает их так, как ты думал, а не как написано. С серверами совсем по другому, в каждом из них какие-то свои тонкости.
На одном сервере обращался к БД с выборкой ячейки DESC - всё работало! На другом сервере - уже как бы нельзя, типо зарезервированное имя под MySQL =(. Пришлось переписывать в `Description` =)

Спустя 2 минуты, 2 секунды (27.09.2010 - 23:54) Ice написал(а):
а ты еще тот быдлокодер, оказывается biggrin.gif Без обид wink.gif

Спустя 1 минута, 24 секунды (27.09.2010 - 23:55) inpost написал(а):
Ice
Я учился по Попову, а там такие косяки были, и мой первый сайт как раз имел такие ляпы, но работал =))) Это было в октябре прошлого года, у меня скоро юбилей, как я стал изучать ПХП =)

П.С. А ещё я хохол =) и сало люблю...

Спустя 2 минуты, 44 секунды (27.09.2010 - 23:58) Ice написал(а):
Цитата (inpost @ 28.09.2010 - 00:55)
и мой первый сайт как раз имел такие ляпы, но работал =)))

напомнило, друг рассказывал, как они замороженные платы продавали на радиорынке. biggrin.gif Работать будет только до тех пор, пока... ну ты понял)

Спустя 4 минуты, 28 секунд (28.09.2010 - 00:02) inpost написал(а):
Ice
Так там до сих пор так работает... а я боюсь и возвращаться туда, проект уже как 8 месяцев назад сдал... а ещё страшно, что вдруг они решат обратиться к оптимизаторам и пиарщикам... =) Вот негативная репутация так и польётся обо мне =)
А вернуться и подправить ляпы - боюсь, вдруг всё навернётся... да и новых дел по горло, так что пусть пока работает на "соплях" =)

Спустя 15 минут, 27 секунд (28.09.2010 - 00:18) T_Mur написал(а):
Денвер это хрень . Я неделю мучался чтобы нормально настроить себе сервер , и , поверьте, - это того стоит ! Такая школа !

Спустя 1 минута, 30 секунд (28.09.2010 - 00:19) T_Mur написал(а):
Это с одной стороны все просто кажется, когда поставил, а когда менял папки , проекты, еще виртуальные хосты подключал, да и до этого... чтобы все нормально связать, а не криво...

это щас себе на работе за пол-часа поставил, а когда только разбирался у меня нервов не хватало

Спустя 11 часов, 48 минут, 4 секунды (28.09.2010 - 12:07) T_Mur написал(а):
Ice, улыбнуло )))

Спустя 22 часа, 42 минуты, 11 секунд (29.09.2010 - 10:49) T_Mur написал(а):
починил код и теперь всё работает, как должно было.
у меня функция session_start() была вбита в самом начале скрипта, непосредственно под открывающим тегом <?рhp
Методом проб и подбора вычислил, что если между этой функцией и блоком логики, в котором в массив $_SESSION['login'] впервые заносится значение логина, у меня еще строки объявления переменных (т.е. СЕКЦИЯ ДАННЫХ), то работать не хочет.

После того, как функцию session_start() перенес четко во вторую секцию (СЕКЦИЯ ЛОГИКИ) все заработало.

Посмотрите:
Старый, нерабочий вариант:
*ТАК ВЫДЕЛЕНО ТО, ЧТО ИЗМЕНИЛОСЬ.
<?php
[b]//ВКЛЮЧИМ СЕССИИ
session_start();[/b]
// >>> СЕКЦИЯ ДАННЫХ <<<

$language=
$_POST["lang"]
?
$_POST["lang"]
:
$_COOKIE["lang"];

$action=
$_POST["action"]
?
$_POST["action"]
:
$_GET["action"];

$login = $_POST["login"];
$password = $_POST["password"];


if($action=="select_language")
{
setcookie("lang",$language,time()+60*60*24*14,"/");
}


$file_general=$_GET["file"];


$page=$_GET["page"];
$var_page=$_COOKIE["var_page"];
$inside_page=$page;


$area_of_choise=$_COOKIE["area_of_choise_var"];


if(!$language)
{
$language="rus";
}

//объявим массив, включающий в себя данные принятые с формы регистрации
$reg_form_fields=Array("name","surname","login","password","password_2","organization","address");

$reg_form_empty_fields=Array();

$new_form_fields=Array("name","surname","login","password","organization","address");

$reg_date=date("d.m.Y H:i");

//ОБЪЯВИМ ПЕРЕМЕННУЮ, В КОТОРУЮ ПО-УМОЛЧАНИЮ БУДЕТ СОХРАНЯТЬСЯ ИМЯ АВАТАРЫ ПРИ РЕГИСТРАЦИИ
$default_avatar_name="default_avatar.jpg";

$max_number_pages_engineering=6;
$max_number_pages_design=6;

// >>> СЕКЦИЯ ЛОГИКИ <<<



[move]Новый, рабочий вариант:[/move]


<?php
// >>> СЕКЦИЯ ДАННЫХ <<<

$language=
$_POST["lang"]
?
$_POST["lang"]
:
$_COOKIE["lang"];

$action=
$_POST["action"]
?
$_POST["action"]
:
$_GET["action"];

$login = $_POST["login"];
$password = $_POST["password"];


if($action=="select_language")
{
setcookie("lang",$language,time()+60*60*24*14,"/");
}


$file_general=$_GET["file"];


$page=$_GET["page"];
$var_page=$_COOKIE["var_page"];
$inside_page=$page;


$area_of_choise=$_COOKIE["area_of_choise_var"];


if(!$language)
{
$language="rus";
}

//объявим массив, включающий в себя данные принятые с формы регистрации
$reg_form_fields=Array("name","surname","login","password","password_2","organization","address");

$reg_form_empty_fields=Array();

$new_form_fields=Array("name","surname","login","password","organization","address");

$reg_date=date("d.m.Y H:i");

//ОБЪЯВИМ ПЕРЕМЕННУЮ, В КОТОРУЮ ПО-УМОЛЧАНИЮ БУДЕТ СОХРАНЯТЬСЯ ИМЯ АВАТАРЫ ПРИ РЕГИСТРАЦИИ
$default_avatar_name="default_avatar.jpg";

$max_number_pages_engineering=6;
$max_number_pages_design=6;

// >>> СЕКЦИЯ ЛОГИКИ <<<
[b]//ВКЛЮЧИМ СЕССИИ
session_start();[/b]
Быстрый ответ:

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