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

Форум PHP

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

 

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

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

тема: авторизация на cookie
 
 автор: 10100100   (31.07.2006 в 08:47)   письмо автору
 
 

Привет всем!
как помните выкладывал свой скриптик авторизации и его тут закритиковали - мол дырявый он и всё такое. критика была воспринята мной правильно и код немного подправлен... ну тоесть полностью переписан и оптимизирован. на самом деле он ещё не о конца защищён, но это в моём вопросе не важно.
в общем вопрос то сам вот в чём.
когда юзер впервые входит на сайт у негона экране в определённом месте появляется формочка для авторизации, после того как он авторизовался он переходит на главную страницу и по идее менюшка для ввода имени и пароля должна исчезать, так как в коде прописано - если куки не пустые то не выводить форму авторизации, а инфа после авторизации записывается в куки, и вместо неё должна быть надпись "Вы авторизованы $name" но этого но происходит, но это ещё не самое странное. Самое странно что когда юзверь переходит в меню авторизации/регистрации это самое окошко исчезает и скрипт работает корректно :( я вообще не могу понять в чём причина...

кусок кода с формой:

<?php
Error_Reporting
(E_ALL & ~E_NOTICE); 
if (!
$_COOKIE["valid_user"])
{  echo 
'
<form name=enterform method=post action=/underconscio/cmsintez/registration/auth.php>    
<td bgcolor=ffffff width=126 height=23></td><td bgcolor=ffffff width=162 height=23>                     
<small>Имя:</small>
<input style=background-color:EDEBEB;color:000000;font-size:10;height:17;width:80 type=text name=name>
</td><td bgcolor=ffffff width=136 height=23>
<small>Пароль:</small>
<input style=background-color:EDEBEB;color:000000;font-size:10;height:17;width:80 type=password name=pass>
</td><td bgcolor=ffffff width=149 height=23>
<input style=background-color:ffffff;border:0;font-size:11;height:20;width:50 type=submit name=submit value=вход>
</td>
</form>'
;
}
else {
echo 
'<td bgcolor=ffffff width=126 height=23></td>
<td bgcolor=ffffff width=162 height=23><small>Вы авторизованы <b>'
;
echo 
$valid_user;
echo 
'</b></small></td>
<td bgcolor=ffffff width=136 height=23></td>
<td bgcolor=ffffff width=149 height=23></td>
'
;}?>


код авторизации/регистрации:

<?php
include ("config.php");
//начало проверка на правильность ввода имени и пароля пользователя.
if (empty($name))
    {
        echo 
'Вы не ввели <b>Имя</b>, пожалуйста попробуйте ещё раз.';
        exit();
    }
if (empty(
$pass))
    {
        echo 
'Вы не ввели <b>Пароль</b>, пожалуйста попробуйте ещё раз.';
        exit();
    }
$name=trim($name);
$pass=trim($pass);
if (!
ereg("[A-Za-zА-Яа-я0-9'()|\/,.~!@#$%^&*;: -]{1,20}"$name))
    {
        echo 
'Введены запрещённые символы в <b>Имени</b>, попробуйте ещё раз.';
        exit();
    }
else {
    if (!
ereg("[A-Za-zА-Яа-я0-9]{1,20}"$pass))
    {
        echo 
'Введены запрещённые символы в <b>Пароле</b>, попробуйте ещё раз.';
            exit();
    }
    else {
            
$pass=md5($pass);
    }
}
//конец проверка на правильность ввода имени и пароля пользователя.

//изменяем время последнего посещения страницы Юзером.
$query2 "UPDATE user SET last_time = NOW() FROM user WHERE name = '".$name."'";
mysql_query($query2);
//данные занесены

//начало проверки на существование тковых логина и пароля и соответствнный вывод либо не выводформы регистрации.
$query "SELECT pass FROM user WHERE name='".$name."'"
$passw mysql_query($query); 
$password mysql_fetch_array($passw);
$passw_num_rows mysql_num_rows($passw);
if(!
$passw

    echo 
"Ошибка выполнения запроса."
    exit(); 

if (empty(
$passw_num_rows))
{
    include (
"../../up.html");
    include (
"../../buttons.php");
    echo 
'<td width=100% bgcolor=D4D4D4 valign=top>
    <table width=100% border=0 cellpadding=0 cellspacing=0><tr><td>'
;
    echo 
'Пользователь с таким именем не обнаружен.<br>Пожалуйста повторите авторизацию.<br>Если Вы не зарегистрированы,     то можете зарегистрироваться здесь.';
    include (
"registration.php");
    include (
"../../dawn.html");
    exit();
}
else 
{
    {
        
setcookie("valid_user"$nametime()+604800);
        if (!
$_COOKIE["valid_user"])
        {
            echo 
'Плюшки не заполнены.';
        }
        else 
        {
        echo 
'Плюшки вродебы заполнены';
        }
    }
    include (
"../../up.html");
    include (
"../../buttons.php");
    echo 
'<td width=100% bgcolor=D4D4D4 valign=top>
    <table width=100% border=0 cellpadding=0 cellspacing=0><tr><td>'
;
    echo 
'Пользователь с таким именем действительно есть. и его зовут <b>';
    echo 
$name;
    echo 
'</b>!<br>';
        if (
$pass == $password['pass'])
        {
            echo 
'И его пароль равен паролю введённому Вами.';
        }
        else
        {
            echo 
'Но его <b>пароль не равен тому что ввели Вы</b>.<br> Попробуйте пройти авторизацию повторно.<br>Если Вы не зарегистрированы, то можете сделать это здесь';
    include (
"registration.php");
        }

    include (
"../../dawn.html");
    exit();    
}
?>

   
 
 автор: Vitas   (31.07.2006 в 08:54)   письмо автору
 
   для: 10100100   (31.07.2006 в 08:47)
 

Во-первых: Я не нашел ничего, где бы Вы устанавливали куки функцией setcookie ()
Во-вторых: Ради безопасности лучше использовать не куки а сеансы (sessions).

   
 
 автор: 10100100   (31.07.2006 в 09:15)   письмо автору
 
   для: Vitas   (31.07.2006 в 08:54)
 

хм, во-первых: Вы не внимательны, ибо в коде это предусмотренно.
а во-вторых: я сказал уже, что код недписан, и сейчас вопрос не в том что мне лучше использовать а что нет, а в том что то что уже есть - не работает.
А судя по тому КАК Вы мне всё это написали вы часто бываете на php-club :)

   
 
 автор: RV   (31.07.2006 в 09:22)   письмо автору
 
   для: 10100100   (31.07.2006 в 09:15)
 

Vitas
в общем случае куки и сессии нужны для разных целей и часто их совмещают.
и уж использовать вместо кук сессии ради безопасности это как бы бред.
10100100
вам надо почитать:
http://ru.php.net/manual/ru/security.globals.php
http://phpfaq.ru/globals

   
 
 автор: 10100100   (31.07.2006 в 09:29)   письмо автору
 
   для: RV   (31.07.2006 в 09:22)
 

Эт точно - совмещатьто я и хочу.
Хм, думаете проблема в этом? ну что ж - спасибо за ссылки - пойду капАть :))

   
 
 автор: RV   (31.07.2006 в 09:31)   письмо автору
 
   для: 10100100   (31.07.2006 в 09:29)
 

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

   
 
 автор: 10100100   (31.07.2006 в 09:37)   письмо автору
 
   для: RV   (31.07.2006 в 09:31)
 

хых, так я понимаю что там выше написано :) просто раньше всё работало на 100% сомневаюсь что после переустановки системы чтото пошло не так - но это не важно - бду копАть всётаки 6=)

   
 
 автор: 10100100   (31.07.2006 в 10:43)   письмо автору
 
   для: 10100100   (31.07.2006 в 08:47)
 

из тех ссылок что мне дали я понял что мне стоит исправить первый код на такой:

<?php
Error_Reporting
(E_ALL & ~E_NOTICE); 
$g $_COOKIE['valid_user'];
if (!
$g)
{  echo 
'
<form name=enterform method=post action=/underconscio/cmsintez/registration/auth.php>    
<td bgcolor=ffffff width=126 height=23></td><td bgcolor=ffffff width=162 height=23>                     
<small>Имя:</small>
<input style=background-color:EDEBEB;color:000000;font-size:10;height:17;width:80 type=text name=name>
</td><td bgcolor=ffffff width=136 height=23>
<small>Пароль:</small>
<input style=background-color:EDEBEB;color:000000;font-size:10;height:17;width:80 type=password name=pass>
</td><td bgcolor=ffffff width=149 height=23>
<input style=background-color:ffffff;border:0;font-size:11;height:20;width:50 type=submit name=submit value=вход>
</td>
</form>'
;
}
else {
echo 
'<td bgcolor=ffffff width=126 height=23></td>
<td bgcolor=ffffff width=162 height=23><small>Вы авторизованы <b>'
;
echo 
$g;
echo 
'</b></small></td>
<td bgcolor=ffffff width=136 height=23></td>
<td bgcolor=ffffff width=149 height=23></td>
'
;}?>


или я чтото путаю, но разницы никакой нет - чую проблема в чём то другом :(
да забыл сказать, если этоконечно важно, этот код инклудится из папки, допустим "Authorization" и кода мы нажимаем на "вход" мы перемещаемся в эту папку, вот там то все куки и работают как надо - с ними там что хочу то и делаю, но как только возвращаюсь в корневую папку - ничего не работает. блин - видать туплю, ожет ктонибуль "популярно" обьяснить?

   
 
 автор: RV   (31.07.2006 в 11:30)   письмо автору
 
   для: 10100100   (31.07.2006 в 10:43)
 

наверно вы что то путаете ибо изменять надо и auth.php тоже

   
 
 автор: 10100100   (31.07.2006 в 11:55)   письмо автору
 
   для: RV   (31.07.2006 в 11:30)
 

тоесть после строки

setcookie("valid_user", $name, time()+604800); 

нужно прописать нечто вроде

$g=$_COOKIE['valid_user'];

?

но на сколько я понял скрипт не должен работать даже в этой папке и файле? так? но почему он тогда работает???о_О

   
 
 автор: RV   (31.07.2006 в 12:03)   письмо автору
 
   для: 10100100   (31.07.2006 в 11:55)
 


<?
if (empty($name)) 
if (empty(
$pass)) 
$name=trim($name); 
$pass=trim($pass); 
?>

и далее. при нормальных настройках хостинга этот код не будет работать. так же исправьте :

<?
mysql_query
($query2) OR die (mysql_error());  
?>

   
 
 автор: 10100100   (31.07.2006 в 12:39)   письмо автору
 
   для: RV   (31.07.2006 в 12:03)
 

Не понял, а чем этот кусок кода

<? 
if (empty($name))  
if (empty(
$pass))  
$name=trim($name);  
$pass=trim($pass);  
?> 

лучше моего?
и как мне всётаки решить свою проблему с Куками?

   
 
 автор: RV   (31.07.2006 в 13:06)   письмо автору
 
   для: 10100100   (31.07.2006 в 12:39)
 

:) это не кусок кода. это куски кода, собраные в один кусок кода, которые надо исправить

   
 
 автор: 10100100   (31.07.2006 в 13:30)   письмо автору
 
   для: RV   (31.07.2006 в 13:06)
 

блин, да это то я понял :))) а чего исправлять то? чего там не так?

   
 
 автор: RV   (31.07.2006 в 13:45)   письмо автору
 
   для: 10100100   (31.07.2006 в 13:30)
 

а вы читали линки?

   
 
 автор: 10100100   (31.07.2006 в 14:02)   письмо автору
 
   для: RV   (31.07.2006 в 13:45)
 

н-ну да, читал, ток видать чтот оне понял :( можете поподробнее?

   
 
 автор: RV   (31.07.2006 в 14:11)   письмо автору
 
   для: 10100100   (31.07.2006 в 14:02)
 

данные $name и $pass приходят откуда изначально?

   
 
 автор: 10100100   (31.07.2006 в 14:19)   письмо автору
 
   для: RV   (31.07.2006 в 14:11)
 

ну дык из формы которая написана выше :)

   
 
 автор: RV   (31.07.2006 в 14:53)   письмо автору
 
   для: 10100100   (31.07.2006 в 14:19)
 

нууу. а у формы метод передачи какой?

   
 
 автор: 10100100   (31.07.2006 в 15:03)   письмо автору
 
   для: RV   (31.07.2006 в 13:06)
 

ПОСТ :) хм .. то есть намёк на то чтобы исправить $name на $name = $_POST['name'] ? :))

   
 
 автор: RV   (31.07.2006 в 15:09)   письмо автору
 
   для: 10100100   (31.07.2006 в 15:03)
 

то есть да

   
 
 автор: 10100100   (31.07.2006 в 17:14)   письмо автору
 
   для: RV   (31.07.2006 в 15:09)
 

ну это то я исправил, но код то всёравно работет по старому - то есть не работает ... :((

   
 
 автор: RV   (31.07.2006 в 17:19)   письмо автору
 
   для: 10100100   (31.07.2006 в 17:14)
 

покажите полный код и скажите что не работает

   
 
 автор: 10100100   (31.07.2006 в 17:21)   письмо автору
 
   для: RV   (31.07.2006 в 17:19)
 

дак естедей - я же всё описал!!!!!
у меня выводится меню из первого кода. в то время когд должна выводится фраза ЗДРАВСТВУЙТЕ! блин - вон там выше всё описано очень подробно, а весь код для этого не нужен...

   
 
 автор: RV   (31.07.2006 в 17:50)   письмо автору
 
   для: 10100100   (31.07.2006 в 17:21)
 

код, который вы привели раньше - неправильный. я вам сказал и вы согласились.
еще читаем http://ru.php.net/setcookie

   
 
 автор: 10100100   (31.07.2006 в 18:03)   письмо автору
 
   для: 10100100   (31.07.2006 в 08:47)
 

нет - неправильным кодом был код с функцией СВМЧ.
дело в том что он не работает (код) только в корневой папке, а в других пашет..
и по англиццки я не понимаю.

   
 
 автор: RV   (31.07.2006 в 18:14)   письмо автору
 
   для: 10100100   (31.07.2006 в 18:03)
 

свмч это что?
если вы знаете в чем проблема, то почему не исправите?
для непонимающих есть translate.ru

вы ставите куку, и тут же ее проверяете. так вот это не правильно.
и это все выплывает только при поверхностном рассмотрении, в логику я не полезу.
займитесь лучше танцами

   
 
 автор: 10100100   (31.07.2006 в 18:44)   письмо автору
 
   для: RV   (31.07.2006 в 18:14)
 

СВИЧ :) очепятка.
в чём проблема я знаю, но как её решить непонимаю.
за Транслейт спасибо ;)
ну проверка куки сделана только для начала - чтобы понять ставится она или нет. а вообще я её уберу... а почему это не правильно?
а вот хамить не надо - танцы не для меня - знаю можете сказат мол PH тоже не для меня, но всёже - как никак а я стараюсь :((((( да не получается, но я стараюсь :(((

   
 
 автор: RV   (31.07.2006 в 19:20)   письмо автору
 
   для: 10100100   (31.07.2006 в 18:44)
 

а почему неправильно и написано по ссылке.
как то станно вы стараетесь, споря что правильно а что нет.
на последок
http://phpfaq.ru/debug

   
 
 автор: 10100100   (31.07.2006 в 19:30)   письмо автору
 
   для: RV   (31.07.2006 в 19:20)
 

блин - да дело в том что мы обсуждаем не ту проблему которую стоило бы обсуждать, у меня есть конкретный вопрос, а мы обсуждаем другие недочёты в коде :( а за ссылку спасибо... я благодарен за любую помощь

   
 
 автор: RV   (01.08.2006 в 04:32)   письмо автору
 
   для: 10100100   (31.07.2006 в 19:30)
 

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

   
Rambler's Top100
вверх

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