|
|
|
| Доброе время!У меня возникла небольшая проблемка,пишу систему авторизации необычную,но неважно,мой вопрос вполне стационарен...так вот,у меня есть страничка 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 | |
|
|
|
|
|
|
|
для: LimP
(09.11.2004 в 19:04)
| | А сейчас не работает? Вроде всё нормально и кукисы на двое суток выставлены... | |
|
|
|
|
|
|
|
для: cheops
(09.11.2004 в 21:27)
| | нет,почему-то он мне говорит,что пароль неправильный,а логин тот...хотя все я ввожу верно...попробуй переписать на свой лад...плиз... | |
|
|
|
|
|
|
|
для: 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';";
|
| |
|
|
|
|
|
|
|
для: LimP
(09.11.2004 в 19:04)
| | А почему вы используете операцию like, не просто сравнение (=)?
<?
$query_check1 = "select * from auth where password like '$passwd_crypt';";
?>
|
| |
|
|
|
|
|
|
|
для: glsv (Дизайнер)
(09.11.2004 в 22:30)
| | пасиба, поисправлял,все заработало,а вот я выставляю куку,если правильный пользователь,то происходит переход на clients.php/client_id=... так вот,мне на этой странице первым делом нужно проверить,существует ли кука на компбтере пользователя или нет,если не существует,до свиданья!а если существует,то отобразить содержимое страницы,как мне это сделать? | |
|
|
|
|
|
|
|
для: 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");
}
}
?>
|
| |
|
|
|
|
|
|
|
для: 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'>";
|
но нифига,хотя у меня в браузере все установлено и другие куки работают.... | |
|
|
|
|
|
|
|
для: LimP
(11.11.2004 в 20:24)
| | Попробуйте посмотреть что вообще есть в массиве $_COOKIE:
<?php
print_r($_COOKIE);
?>
|
| |
|
|
|
|
|
|
|
для: 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'>";
?>
|
| |
|
|
|
|
|
|
|
для: LimP
(17.11.2004 в 18:15)
| | В первую очередь попробуйте посмотреть пишутся ли cookies в директорию C:/Documents and Settings/Имя пользователся/Cookies/ - в этой директории должен быть файл в котором будут имена login и passwd. | |
|
|
|
|
|
|
|
для: cheops
(17.11.2004 в 22:56)
| | у меня там такоая куча файлов,что даже и не разьерусь....а правильно ли я вообще все делаю??? | |
|
|
|
|
|
|
|
для: LimP
(18.11.2004 в 16:31)
| | Да вроде всё правильно... чтобы воспроизвести ситуацию нужна таблица. Cookie можно все потереть, правда если не боитесь вводить пароли и логины на всех сайтах которые посещаете (на нашем форуме точно придётся осущствить вход, после того как куки будут потёрты). Или ориенитруйтесь на что-то вроде администратор@index.txt, администратор@localhost.txt... | |
|
|
|
|
|
|
|
для: 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 в 17:19)
| | лан,хрен с куками не получается,тогда пойду более надежным путем...через .htaccess и возникает вопрос может ли .htaccess взаимодействовать с php ?? и как и с базой данных тоже...например пользователь зарегился(его пароль и ник в базу заносятся тут же) и тут же он может пойти по ссылке и зайти в директорию которая защищена от входа и пишет свои логин и пароль...и эти лог и пароль проверяются по базе если все совпадает,то на ту-то страницу,если нет,до свиданья....или как это вообще можно сделать???если не с помощью php? | |
|
|
|
|
|
|
|
для: LimP
(20.11.2004 в 23:48)
| | ;) | |
|
|
|
|
|
|
|
для: 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();
};
?>
|
Таким образом вводим логин и пароль один раз при входе в защищеную директорию и браузер их помнит пока не будет закрыт. | |
|
|
|