Вопрос по сессиям

MisterBonus

Новичок
Вопрос по сессиям

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

Решил организовать на своём сайте авторизацию пользователей.
Из формы на "защищённую" страницу посылаются 2 переменные (login,pass), затем стартует сессия:

$login = htmlspecialchars ("$login",ENT_QUOTES);
$login = trim($login);

$pass = htmlspecialchars ("$pass",ENT_QUOTES);
$pass = trim($pass);

$sr = mysql_query("select * from table where login = '$login' and pass = '$pass'");
$s = mysql_fetch_array($sr);

if($sr == true){

session_start();
$_SESSION['user']=$login;
$_SESSION['pass']=$pass;

$result = mysql_query("select * from table where login = ".$_SESSION['user']." and pass = ".$_SESSION['pass']."");

$myrow = mysql_fetch_array($result);

}

У меня не срабатывает запрос! Как правильно мне его организовать?

Думал сделать как-то так:

$userr = $_SESSION['user'];
$passs = $_SESSION['pass'];

$result = mysql_query("select * from table where login = '$userr' and pass = '$passs'");
$myrow = mysql_fetch_array($result);

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

Вобщем я слишком мало понимаю в php, что бы быть в чём-то уверенным...

Заранее огромное спасибо за ответ! :)
 

zerkms

TDD infected
Команда форума
зачем ты делаешь проверку дважды?? неужели один и тот же запрос с одними и теми же данными может во второй раз вернуть что-то другое?

нужно для начала проверить, что логин+пасс верные, и потом сохранить в сессии (для будущего использования) ТОЛЬКО логин.

$login = htmlspecialchars ("$login",ENT_QUOTES);
$login = trim($login);

$pass = htmlspecialchars ("$pass",ENT_QUOTES);
$pass = trim($pass);
а это вообще что за самодеятельность? зачем это? где экранирование средствами mysql_real_escape_string() ? зачем кавычки вокруг переменных?
 

MisterBonus

Новичок
Спасибо за ответ! Не думал что кто-то может ответить так быстро!

Эта самодеятельность - результат моих размышлений над найденной в интернете информацией.
mysql_real_escape_string() я не использую потому, что вроде как htmlspecialchars должен "превратить" все / и \ в спецсимволы, которые уже в запросе не будут выглядить как / и \... и поэтому я думаю что это в моём случае бесполезная функция...

Но я ни в чём не уверен! Всё это мои личные выводы! Можно сказать выводы новичка, начавшего изучение PHP.

Буду рад мнению опытных php-программеров!
 

zerkms

TDD infected
Команда форума
mysql_real_escape_string() я не использую потому, что вроде как htmlspecialchars должен "превратить" все / и \ в спецсимволы, которые уже в запросе не будут выглядить как / и \... и поэтому я думаю что это в моём случае бесполезная функция...
в логине кавычку напиши и посмотри что будет? читать: http://phpfaq.ru/slashes
 

MisterBonus

Новичок
У меня возникли непонятки с использованием сессии.
Прочитал http://www.phpfaq.ru/sessions ...

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

Выходит на какую-бы страницу пользователь не зашёл сессия стартует, а это значит что стартует она всегда, а не только тогда, когда пользователь авторизировался...

Вообще ничего не пойму............
 

zerkms

TDD infected
Команда форума
тебе рано пока такими вопросами заморачиваться. стартуй сессию на каждой странице.
 

Фанат

oncle terrible
Команда форума
MisterBonus
там же написано, как проверить. прямо готовый код

-~{}~ 09.08.09 17:05:

но вообще это да - не принципиально. делай пока как угодно
 

MisterBonus

Новичок
Блин... наверное я туплю...

if (isset ($_SESSION[user]) and isset ($_SESSION[pass])){

$sr = mysql_query("select * from table where user = '$_SESSION[user]' and pass = '$_SESSION[pass]'");

if ($sr == true){
session_start();}

;}

так это делается?
 

zerkms

TDD infected
Команда форума
MisterBonus
зачем тебе из сессии выбирать логин и пароль?
прими их из формы, если они верные - запиши в сессию ТОЛЬКО ЛОГИН. и дальше пользуйся только этим логином - он достоверный.
 

MisterBonus

Новичок
Точно! Просто от большого количества новой информации голова разбухает... и начинаю тупить... а так я правильно пример создал?
Ещё одна маленькая просьба... интересно посмотреть на твой сайт, zerkms... Думаю у тебя он должен быть...
 

Фанат

oncle terrible
Команда форума
MisterBonus
Тебе действительно надо отдохнуть. Не увидеть ссылку в подписи - это у тебя явно крайняя степень переутомления.
 

iceman

говнокодер
session_start(); в самом начале должен быть...

т.е. стартуешь сессию, а патом авторизовываешь пользователя (там твои проверки суешь)
 

MisterBonus

Новичок
Я просто не сообразил что эта ссылка именно на его сайт...

Сейчас у меня вот так:

$login = mysql_real_escape_string ($login)
$login = htmlspecialchars ($login,ENT_QUOTES);
$login = trim ($login);

$pass = mysql_real_escape_string ($pass)
$pass = htmlspecialchars ($pass,ENT_QUOTES);
$pass = trim ($pass);

$sr = mysql_query("select * from table where login = '$login' and pass = '$pass'");
$s = mysql_fetch_array($sr);

if($sr == true){

session_start();
$_SESSION['user']=$login;

$result = mysql_query("select * from table where login = '$_SESSION[user]'");
$myrow = mysql_fetch_array($result);}

На всех остальных страницах в самом начале

if (isset ($_SESSION[user])){

$sr = mysql_query("select * from table where user = '$_SESSION[user]'");

if ($sr == true){
session_start();}

;}

Только вот запутался с кавычками... никак не разберусь где мне их ставить, а где нет...
В запросе $_SESSION['user'] или $_SESSION[user]...
 

zerkms

TDD infected
Команда форума
MisterBonus
вот тебе набросок как тебе нужно будет это всё переделать. причём лучше удалить полностью и сделать с нуля:

страница авторизации:

session_start();
$login = $_POST['login'];
$password = $_POST['password'];

запрос на выборку примерно такой: 'SELECT ... WHERE `login` = "' . mysql_real_escape_string($login) . '" AND password так же как логин
if (если пароль и логин совпадают) {
$_SESSION['login'] = $login;
редирект на куда-нибудь
}

// эта часть кода работает если логин неверный
выводим ошибку и форму авторизации снова



любая другая страница:

if (isset($_SESSION['login'])) {
// если это условие истинно - тогда используем готовую информацию. можно сразу выбрать всю инфу из таблы юзеров (если она тебе нужна) и запихнуть в сессию
htmlspecialchars используем только тут, для вывода в браузер. например:

echo 'Привет, ' . htmlspecialchars($_SESSION['login']);
}


ps:


$sr = mysql_query("select * from table where login = '$login' and pass = '$pass'");
$s = mysql_fetch_array($sr);

if($sr == true){

session_start();
$_SESSION['user']=$login;

$result = mysql_query("select * from table where login = '$_SESSION[user]'");
$myrow = mysql_fetch_array($result);}
ну вот зачем ты здесь один и тот же запрос выполняешь дважды? зачем?
 

Фанат

oncle terrible
Команда форума
опять бредятина с htmlspecialchars

-~{}~ 09.08.09 17:56:

iceman
ну вот как раз не факт.
чо бы блин не почитать тему перед тем, как в нее калякать?
 

MisterBonus

Новичок
Понял. Огромное спасибо! ОГРОМНЕЙШЕЕ! Займусь переделкой позже... (может завтра...) устал...

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

Зарегистрировался в А1-Агрегаторе (СМС-биллинг)... теперь малость :) сайта не хватает... Самое главное - задумка... уже "почти" воплощена в жизнь (процентов на 50), уже знаю за что деньги собирать буду... "технические" проблемы подключения к СМС-биллингу преодолел (скрипт работает, приходит ответная СМС... деньги со счёта снимаются... проверено на моём личном сотовом!)... теперь вот остались некоторые "непонятки" с безопасностью сайта (сомнения по поводу того, как же всё-таки его лучше "защитить"-то от возможных "хакерских атак" и других "неприятных моментов"), непонятки (которые я надеюсь в близжайшее время уже решить...) с сессиями... и ещё нужно будет узнать о некоторых моментах java-script... и всё... как в мечте... :) цель будет достигнута!

Ещё не знаю как-бы дело обстояло без этого форума! Уж очень он мне помагает! ВСЕМ СПАСИБО!

А каким образом, zerkms, ты на своём сайте зарабатываешь?
 

С.

Продвинутый новичок
На всех остальных страницах в самом начале

if (isset ($_SESSION[user])){

$sr = mysql_query("select * from table where user = '$_SESSION[user]'");

if ($sr == true){
session_start();}
Как же ты используешь содержимое сессионной переменной ДО ТОГО как стартовал сессию?
 
Сверху