Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> авторизация пользователя 
V
    Опции темы
StachelDraht
Дата 19.11.2008, 13:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Не Опытный
**


Профиль
Группа: Участник
Сообщений: 429
Регистрация: 19.1.2006

Репутация: 1
Всего: 1



Привет!
Тема наверно была много раз. Но все таки.

Проблема с авторизацией юзеров.
Начал изучать сесси и столкнулся с проблемой. При авторизации скрипт говорит что такого юзера нет. Хотя он есть.


Это форма через которую проверяем имя и пароль.
Код

<?
session_start();
echo session_id();
?>
<form action=handler.php methid=post>
Username:<input type=text name=name value=<? echo $_SESSION['user']; ?>><br>
Password:<input type=password name=password value=<? echo $_SESSION['password']; ?>><br>
<input type=submit value=Send>
<input type=hidden name=session_id value=<? echo session_id(); ?>>
</form>
<?
if(isset($_SESSION['user']))
{
    echo "Hello, ".$_SESSION['user']."!";
}
?>


Это обработчик
Код

<?
include "conf.php";

if($_POST['session_id'] != session_id())
{
    exit ("Fuck off!");
}
$query = "SELECT pass=MD5('$_POST[password]') FROM users WHERE name='$_POST[name]'";
$nme = mysql_query($query);
if(!$nme) exit ("ERROR QUERY!");
if(mysql_num_rows($nme) > 0)
{
if(session_start())
    {
        $_SESSION['user']=$_POST['name'];
        $_SESSION['password']=$_POST['password'];
        
        echo "<HTML><HEAD>
                    <META HTTP-EQUIV='Refresh' CONTENT='0; URL=index.php'>
                    </HEAD><body>";
    }
else exit ("Wrong password or username");
}
else exit ("No user");
?>


Все по учебнику, а не работает.

Спасибо!

PM MAIL   Вверх
Brilona
Дата 19.11.2008, 14:00 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 54
Регистрация: 8.7.2008

Репутация: 1
Всего: 3



В описании формы вместо "method" написано "methid"... Может в этом проблема? ;)
PM MAIL ICQ   Вверх
StachelDraht
Дата 19.11.2008, 14:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Не Опытный
**


Профиль
Группа: Участник
Сообщений: 429
Регистрация: 19.1.2006

Репутация: 1
Всего: 1



Brilona, спасибо! smile 

Теперь другая проблема.
Скрипт останавливается в этом месте:
Код

if($_POST['session_id'] != session_id())
{
    exit ("Fuck off!");
}

т.е. получается что идентификатор сесси из формы не совпадает
PM MAIL   Вверх
Brilona
Дата 19.11.2008, 14:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 54
Регистрация: 8.7.2008

Репутация: 1
Всего: 3



1) Я бы проверила (через echo), передается ли вообще идентификатор сессии из формы.
2) Возможно нужно, чтобы идентификатор был в апострофах или кавычках.
PM MAIL ICQ   Вверх
StachelDraht
Дата 19.11.2008, 14:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Не Опытный
**


Профиль
Группа: Участник
Сообщений: 429
Регистрация: 19.1.2006

Репутация: 1
Всего: 1



ид сесси передается

Добавлено через 6 минут и 57 секунд
session_start(); в handler.php
Не очень хороший учебник.

Спасибо!
PM MAIL   Вверх
StachelDraht
Дата 19.11.2008, 23:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Не Опытный
**


Профиль
Группа: Участник
Сообщений: 429
Регистрация: 19.1.2006

Репутация: 1
Всего: 1



Все равно ернуда какая то.
Вводим существующее имя пользователя и любой пароль, система авторизовывает без проблем.
форма:
Код

<?
session_start();

if(isset($_SESSION['user']))
{
    echo "Hello, ".$_SESSION['user']."!<br>";
}
else
echo "<form action=handler.php method=post>
Username:<input type=text name=name value=".$_SESSION['user']."><br>
Password:<input type=password name=password value=".$_SESSION['password']."><br>
<input type=submit value=Send>
<input type=hidden name=session_id value=".session_id().">
</form>";
session_destroy();
?>

Обработчик:
Код

<?
include "conf.php";
session_start();
if($_POST['session_id'] != session_id())
{
    exit ("Fuck off!");
}
$query = "SELECT pass=MD5('$_POST[password]') FROM users WHERE name='$_POST[name]'";
$nme = mysql_query($query);
if(!$nme) exit ("ERROR QUERY!");
if(mysql_num_rows($nme) > 0)
{
if(session_start())
    {
        $_SESSION['user']=$_POST['name'];
        $_SESSION['password']=$_POST['password'];
        
        echo "<HTML><HEAD>
                    <META HTTP-EQUIV='Refresh' CONTENT='0; URL=index.php'>
                    </HEAD><body>";
    }
else exit ("Wrong password or username");
}
else exit ("No user");
?>

PM MAIL   Вверх
ksnk
Дата 20.11.2008, 00:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 96
Всего: 386



Цитата

SELECT pass=MD5('$_POST[password]') FROM users WHERE name='$_POST[name]'

Это что, запрос ?  И даже mysql на него не ругается?


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
unicross
Дата 20.11.2008, 00:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 422
Регистрация: 15.6.2008

Репутация: 21
Всего: 53



Цитата(StachelDraht @  19.11.2008,  23:43 Найти цитируемый пост)
$query = "SELECT pass=MD5('$_POST[password]') FROM users WHERE name='$_POST[name]'";

Это в каком учебнике такому учат?
Код

$query = "SELECT * FROM `users` WHERE `name`='" . mysql_real_escape_string($_POST['name']) . "' AND `pass`='" . MD5($_POST['password']) . "'";


Оппс... ksnk опередил...

Это сообщение отредактировал(а) unicross - 20.11.2008, 01:00
PM MAIL WWW   Вверх
StachelDraht
Дата 20.11.2008, 01:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Не Опытный
**


Профиль
Группа: Участник
Сообщений: 429
Регистрация: 19.1.2006

Репутация: 1
Всего: 1



ksnk
unicross
не ругается.

Учебник:
PHP 5 на примерах
Максим Кузнецов
Игорь Симдянов
Сергей Голышев
Описание здесь

Добавлено через 3 минуты и 29 секунд
Четвертый раз пытаюсь написать авторизацию по этой книге.

Это сообщение отредактировал(а) StachelDraht - 20.11.2008, 01:12
PM MAIL   Вверх
ksnk
Дата 20.11.2008, 01:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 96
Всего: 386



unicross, Ну да, там-же логическая операция... чего ему ругатся то.

строка 13:
if(session_start()) - это что имелось ввиду? Старт сеcсии второй раз?



--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
StachelDraht
Дата 20.11.2008, 02:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Не Опытный
**


Профиль
Группа: Участник
Сообщений: 429
Регистрация: 19.1.2006

Репутация: 1
Всего: 1



ksnk
если в строке 3 убрать session_start();
вообще ни фига не работает

честно говоря я вобще не понимаю этот кусок кода
Код

if(session_start())
    {
        $_SESSION['user']=$_POST['name'];
        $_SESSION['password']=$_POST['password'];
        
        echo "<HTML><HEAD>
                    <META HTTP-EQUIV='Refresh' CONTENT='0; URL=index.php'>
                    </HEAD><body>";
    }


PM MAIL   Вверх
Sanchezzz
  Дата 20.11.2008, 06:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1670
Регистрация: 19.11.2006
Где: Voronezh

Репутация: 41
Всего: 60



 smile  smile 

что зв бред в сесcию заноси тогда когда пользователь прошел авторизацию а не сразу пост данные в сессию это тупо... Далее твой шаг былбы таким если ты будишь держать pass и login в сессии ты будишь каждый раз проверять если такой пользователь в БД... не проще сделать так:

Код

<?
@session_start();

if(@$_POST['Send'])
  if($_POST['name']!='' and $_POST['password']!=''){
  $q = "SELECT * FROM `users` WHERE `name`='" .mysql_real_escape_string($_POST['name']) ."' AND `pass`= MD5(".$_POST['password'].") LIMIT 1";
   $res = mysql_query($q);
     if(mysql_num_rows($res)!=0){
      $row = mysql_fetch_assoc($res);
      $_SESSION['AUT'] = 'Y';
      $_SESSION['login'] = $row['name'];
     }else print 'Узера нет такого в БД';
  }else print 'поля заполнять кто будет?';

//далее идет проверка если у вошедшего авторизация...

if(isset($_SESSION['AUT']) and $_SESSION['AUT']=='Y') {
 print 'Вы вошли под логином:'.$_SESSION['login'];
 //итд...
 
}else print '
<form action="'.$_SERVER['PHP_SELF'].'" method="post">
Username:<input type="text" name="name"><br>
Password:<input type="password" name="password"><br>
<input type="submit" value="Send">
</form>';
?>



Это сообщение отредактировал(а) Sanchezzz - 20.11.2008, 06:42


--------------------
Понравился ответ "+" по репе, не забываем закрывать тему, заказы в LS.
PM MAIL Skype GTalk   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1244 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.