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

Форум PHP

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

 

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

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

тема: Авторизация
 
 автор: LimP   (09.11.2004 в 19:04)   письмо автору
 
 

Доброе время!У меня возникла небольшая проблемка,пишу систему авторизации необычную,но неважно,мой вопрос вполне стационарен...так вот,у меня есть страничка auth.php на ней пользователь вводит свой логин и пароль и нажимает окей,в резельтате по базе проверяется есть ли такой логин вообще,если нет,то до свидания-переход на auth.php?invalid=login а если такой логин существует,то проверяется пароль,если все тип топ,то милости просим на clients.php?client_id={тут будет уникальный номер клиента} и вот,я пишу следующее

<?php
include "config.php";
//------------------------------------
$login $_POST['login'];
$passwd $_POST['password'];
$passwd_crypt md5($passwd);
//------------------------------------
$query_check "select * from auth where login like '$login';";
$ok mysql_query($query_check);
if(@
mysql_num_rows($ok)>0)
{
 
$query_check1 "select * from auth where password like '$passwd_crypt';";
 
$ok1 mysql_query($query_check1);
 if(@
mysql_num_rows($ok1)>0)
 {
  
$query21 "select * from auth where login='$login' , password='$passwd_crypt';";
  
$oka21 mysql_query($query21);
  
//ставим куку------------------------------------
  
setcookie("login",$login,time()+3600*24*2);
  
setcookie("passwd",$passwd_crypt,time()+3600*24*2);
  
//ставим куку------------------------------------
  
$arr mysql_fetch_array($oka21);
  
$client_id $arr['client_id'];
  if(
$client_id != "")
   echo 
"<meta http-equiv='refresh' content='0;url=clients.php?client_id=".$client_id."'>";
  else  echo 
"<meta http-equiv='refresh' content='0;url=../auth.php?error=server'>";
 }
 else echo 
"<meta http-equiv='refresh' content='0;url=../auth.php?invalid=passwd'>";
}
else echo 
"<meta http-equiv='refresh' content='0;url=../auth.php?invalid=login'>";

?>

а вот строение таблицы,где хранятся все пароли и логины....

CREATE TABLE auth (
  client_id int(10) NOT NULL auto_increment,
  login text,
  password tinytext,
  PRIMARY KEY  (client_id)
) TYPE=MyISAM;

собственно и все,а забыл,пароли хранятся в базе в закодированном виде через функцию ьв5юююкак мне сделать,чоб работало,и вообще,подскажите,может это неправильно,что я использую md5 может что-то другое посоветуете???а да,еще куки нано выставить на 2 дня ....
заранее благодарен,LimP

   
 
 автор: cheops   (09.11.2004 в 21:27)   письмо автору
 
   для: LimP   (09.11.2004 в 19:04)
 

А сейчас не работает? Вроде всё нормально и кукисы на двое суток выставлены...

   
 
 автор: LimP   (09.11.2004 в 21:55)   письмо автору
 
   для: cheops   (09.11.2004 в 21:27)
 

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

   
 
 автор: glsv (Дизайнер)   (09.11.2004 в 22:26)   письмо автору
 
   для: LimP   (09.11.2004 в 19:04)
 

А вот на этот запрос разве не ругается?...
select * from auth where login='$login' , password='$passwd_crypt';"; 
Нужно, по моему, так

select * from auth where login='$login' and password='$passwd_crypt';"; 

   
 
 автор: glsv (Дизайнер)   (09.11.2004 в 22:30)   письмо автору
 
   для: LimP   (09.11.2004 в 19:04)
 

А почему вы используете операцию like, не просто сравнение (=)?

<?
$query_check1 
"select * from auth where password like '$passwd_crypt';";
?>

   
 
 автор: LimP   (11.11.2004 в 17:02)   письмо автору
 
   для: glsv (Дизайнер)   (09.11.2004 в 22:30)
 

пасиба, поисправлял,все заработало,а вот я выставляю куку,если правильный пользователь,то происходит переход на clients.php/client_id=... так вот,мне на этой странице первым делом нужно проверить,существует ли кука на компбтере пользователя или нет,если не существует,до свиданья!а если существует,то отобразить содержимое страницы,как мне это сделать?

   
 
 автор: cheops   (11.11.2004 в 17:13)   письмо автору
 
   для: LimP   (11.11.2004 в 17:02)
 

Нужно попытаться установить cookies у клиента и проверить установились они или нет:
<?php
if(!isset($_GET['probe']))
{
  
// устанавливаем cookie с именем "test"
  
if(setcookie("test","set"))
  {
    
// посылаем заголовок переадресации на страницу,
    // с которой будет предпринята попытка установить cookie 
    
header("Location: $PHP_SELF?probe=set");
  }
}
else
{
  if(!isset(
$_COOKIE["test"]))
  {
    echo(
"Для корректной работы приложения необходимо включить cookie");
  }
  else
  {
    
// cookie включены, переходим на нужную страницу,
    // послав заголовок, содержащий адрес нужной страницы 
    
header("Location: $PHP_SELF");
  }
}
?>

   
 
 автор: LimP   (11.11.2004 в 20:24)   письмо автору
 
   для: cheops   (11.11.2004 в 17:13)
 

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

if(setcookie("login",$login,time()+3600*24*2) && setcookie("passwd",$passwd_crypt,time()+3600*24*2))
  {
    header("location:../clients.php?client_id=".$client_id."");
  }

и вот так в сккрипте проверяю,работает ли она...

if(!isset($_COOKIE["login"]))
  echo "<meta http-equiv='refresh' content='0; url=auth.php?error=cookie'>";
if(!isset($_COOKIE["passwd"]))
  echo "<meta http-equiv='refresh' content='0; url=auth.php?error=cookie'>";

но нифига,хотя у меня в браузере все установлено и другие куки работают....

   
 
 автор: cheops   (11.11.2004 в 22:45)   письмо автору
 
   для: LimP   (11.11.2004 в 20:24)
 

Попробуйте посмотреть что вообще есть в массиве $_COOKIE:
<?php
  print_r
($_COOKIE);
?>

   
 
 автор: LimP   (17.11.2004 в 18:15)   письмо автору
 
   для: cheops   (11.11.2004 в 22:45)
 

у меня в массиве ничего нету,просто не делается видимо кука,я не знаю,что делать,в другом файле пытаюсь поставить куку,все втавится,работает,вывожу содержимое куки,а тут фигня,вот полный код скрипта,может в нем что не так,помогите,позарез срочняк нужно!

<?php
include "config.php";
//------------------------------------
$log $_POST['login'];
$log2 trim($log);
$log1 htmlspecialchars($log2);
$login stripslashes($log1);
//------------------------------------
$pass $_POST['password'];
$pass1 trim($pass);
$pass2 htmlspecialchars($pass1);
$passwd stripslashes($pass2);
$passwd_crypt md5($passwd);
//------------------------------------
$query_check "select * from auth where login='$login';";
$ok mysql_query($query_check);
if(@
mysql_num_rows($ok)>0)
{
 
$query_check1 "select * from auth where password='$passwd_crypt';";
 
$ok1 mysql_query($query_check1);
 if(@
mysql_num_rows($ok1)>0)
 {
  
$query21 "select * from auth where login='$login' and password='$passwd_crypt';";
  
$oka21 mysql_query($query21);
  
$arr mysql_fetch_array($oka21);
  
$client_id $arr['client_id'];
  if(
$client_id != "")
  {
   
//ставим куку------------------------------------
  
if(setcookie("login",$login,time()+3600*24*2) && setcookie("passwd",$passwd_crypt,time()+3600*24*2))
    echo
"<meta http-equiv='refresh' content='0; url=../clients.php?client_id=".$client_id."'>";
  
//ставим куку------------------------------------
  
}
  else  echo 
"<meta http-equiv='refresh' content='0;url=../auth.php?error=server'>";
 }
 else echo 
"<meta http-equiv='refresh' content='0;url=../auth.php?invalid=passwd'>";
}
else echo 
"<meta http-equiv='refresh' content='0;url=../auth.php?invalid=login'>";

?>

   
 
 автор: cheops   (17.11.2004 в 22:56)   письмо автору
 
   для: LimP   (17.11.2004 в 18:15)
 

В первую очередь попробуйте посмотреть пишутся ли cookies в директорию C:/Documents and Settings/Имя пользователся/Cookies/ - в этой директории должен быть файл в котором будут имена login и passwd.

   
 
 автор: LimP   (18.11.2004 в 16:31)   письмо автору
 
   для: cheops   (17.11.2004 в 22:56)
 

у меня там такоая куча файлов,что даже и не разьерусь....а правильно ли я вообще все делаю???

   
 
 автор: cheops   (18.11.2004 в 16:39)   письмо автору
 
   для: LimP   (18.11.2004 в 16:31)
 

Да вроде всё правильно... чтобы воспроизвести ситуацию нужна таблица. Cookie можно все потереть, правда если не боитесь вводить пароли и логины на всех сайтах которые посещаете (на нашем форуме точно придётся осущствить вход, после того как куки будут потёрты). Или ориенитруйтесь на что-то вроде администратор@index.txt, администратор@localhost.txt...

   
 
 автор: LimP   (20.11.2004 в 17:19)   письмо автору
 
   для: cheops   (18.11.2004 в 16:39)
 


CREATE TABLE auth ( 
  client_id int(10) NOT NULL auto_increment, 
  login text, 
  password tinytext, 
  PRIMARY KEY  (client_id) 
) TYPE=MyISAM; 

вот таблица,я ее уже раньше выше публиковал...

   
 
 автор: LimP   (20.11.2004 в 23:48)   письмо автору
 
   для: LimP   (20.11.2004 в 17:19)
 

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

   
 
 автор: LimP   (21.11.2004 в 13:39)   письмо автору
 
   для: LimP   (20.11.2004 в 23:48)
 

;)

   
 
 автор: glsv (Дизайнер)   (21.11.2004 в 21:59)   письмо автору
 
   для: LimP   (20.11.2004 в 23:48)
 

Можно использовать авторизацию на php. Но php должен быть запущен как модуль - иначе работать не будет.

 AddType application/x-httpd-php phtml php php3
 LoadModule php5_module c:\php-5.0\php5apache2.dll 


Во все файлы в защищенной директории подключаем файл авторизации - auth.php
<?
  
include "auth.php";
?>


А в файле auth.php проводим инициализацию с проверкой логинов и паролей по базе.
<?
$login 
preg_replace("/[^\\w_-]/","",$_SERVER['PHP_AUTH_USER']);
$query="SELECT * FROM person 
      WHERE login='"
$login"' AND 
      pass='"
md5($_SERVER['PHP_AUTH_PW']). "'";

$result mysql_query($query);
if (@
mysql_num_rows($result)!=1
{
    
header("WWW-Authenticate: Basic realm=\"User area\"");
    
header("HTTP/1.0 401 Unauthorized");
    print(
"Защищенная директория. Введите логин и пароль");
    exit();
};
?>


Таким образом вводим логин и пароль один раз при входе в защищеную директорию и браузер их помнит пока не будет закрыт.

   
Rambler's Top100
вверх

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