[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Класс авторизации... написал функции, нужен класс
m4a1fox
Всем доброго утра. Ну что же я продолжаю постигать тайну ООП! Потихоньку, маленькими сажочками, но постигать. Так вот. Собственно интересно стало написать класс авторизации админа на сайте. Собственно проблемка вот в чем. Написать на php получилось. Вот. Не идеал конечно, банальшина, но

if(isset($_POST['send'])) {
$name = !empty($_POST['name'])?trim($_POST['name']):'Guest';
$pass = !empty($_POST['pass'])?md5($_POST['pass']):NULL;

$result = mysql_query("SELECT COUNT(*) AS cnt FROM `login`
WHERE name = '"
.mysql_real_escape_string($name)."'
AND `encode` = '"
.$pass."'
"
);
if(mysql_result($result, 0) == 0) {
$ok = '<font color=red>Name or Pass is wrong. Please retry again.</font>';
} else {
setcookie("name", "$name", time()+3600, '/');
setcookie("pass", "$pass", time()+3600, '/');
$ok = '<b>Welcome.</b> Name and Pass is correct.';
header("Location: ./index.php");
}
echo $ok;
}

А как теперь перенести все это в класс??? Подскажите?!



Спустя 1 час, 7 минут, 50 секунд (14.07.2011 - 11:32) m4a1fox написал(а):
Так... Господа. Не стесняемся, унижаем меня :D Вот до чего моя мысль меня довела

class autorizationAdmin extends connect_Db {
private static $table = 'login';

function enter($name, $pass) {
$sql = "SELECT COUTN(*) FROM `".self::$table."`
WHERE `name` = '"
.$name."'
AND `encode` = '"
.$pass."'
"
;
$true = $this->sql($sql);
if(mysql_result($true, 0) != 0) {
$ok = '<font color=red>Name or Pass is wrong. Please retry again.</font>';
} else {
setcookie("name", "$name", time()+3600, '/');
setcookie("pass", "$pass", time()+3600, '/');
header("Location: ./index.php");
}
return $ok;
}
}



$autorization = new autorizationAdmin;

Но не пролучается.

Спустя 1 минута, 53 секунды (14.07.2011 - 11:34) neadekvat написал(а):
Что изменилось с последнего моего появление в твоей теме? По-моему, ты просто достал метод из своего класса, назвал его функцией, а потом снова вернул в тот же класс и теперь показываешь. Сколько советов из тех, что тебе давали в твоих ближайших темах, ты помнишь?

Спустя 2 минуты, 56 секунд (14.07.2011 - 11:37) m4a1fox написал(а):
neadekvat
ААААААААААААААА! Не делайте этого! Ну ладно, каюсь!

Спустя 4 минуты, 2 секунды (14.07.2011 - 11:41) neadekvat написал(а):
Цитата (m4a1fox @ 14.07.2011 - 12:37)
Не делайте этого!

Чего?

Цитата (m4a1fox @ 14.07.2011 - 12:37)
Ну ладно, каюсь!

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

Спустя 6 минут, 20 секунд (14.07.2011 - 11:47) m4a1fox написал(а):
neadekvat
Как вы не поймете. Если вы заметили (из моих прошлых тем). Я же банально пытаюсь вникнуть в суть. Я не лечу сломя голову и перепрыгивая через главы ооп. Я просто пытаю понять что я могу получить используя только то что я знаю. Да, согласен, тогда, я тупил, я хотел сделать по своему (то есть так как я понимаю), а советы, что вы давали в других темах, этого я просто не понимаю, не потому что, я вас игнорирую, а потому что вы знаете, что умнее меня, и я это знаю, но Вы думаете, если Вы мне напишите, то что правильно (и то что я вижу впервые) я сразу должен въехать в это и понять. Даже так, если разобрать коды что вы присылаете, и понять что каждое слово означает, трудно понять логику программа ооп. Особенно ооп. Так что, если не хотите помогать, а только критиковать, то извините меня пожалуйста, но может тогда не стоит так делать. ИМХО. Спасибо.

Спустя 4 минуты, 2 секунды (14.07.2011 - 11:51) neadekvat написал(а):
Все те люди, которые смотрят на меня как на сурового критика, который тут только чтобы засирать других, никогда не получают от меня нормальной помощи. Я ее даю - а они не берут.
Те же, кто не в курсе, кто я (по вашему общему мнению), или кто реально хочет разобраться - всегда получают помощь, разбираются и кричат "Спасибо".
Или ты думаешь, что я персонально тебе усложняю ответы, чтобы ты не понял? Сюр.

Спустя 1 минута, 42 секунды (14.07.2011 - 11:53) m4a1fox написал(а):
neadekvat
нет что вы. Я знаю кто вы. Прекрассно знаю. И уважаю Вас как программиста. Но вот только... Я так же прекрассно понимаю, что вы направляете (и это правильно). Ладно. Извините, сам виноват. Надо больше времени уделять теории.

Спустя 8 минут, 51 секунда (14.07.2011 - 12:02) alex12060 написал(а):
m4a1fox

Эх ты, ща накалякаю тебе модный классик smile.gif

Спустя 2 минуты, 49 секунд (14.07.2011 - 12:05) m4a1fox написал(а):
alex12060
biggrin.gif Типо того. Ну да ладно! Харе ржать. Я нашел где я дурак.

Спустя 34 минуты, 41 секунда (14.07.2011 - 12:39) ИНСИ написал(а):
m4a1fox - мне снова тебе писать?! Почитай мое мнение тут: http://phpforum.ru/index.php?act=ST&f=125&...15#entry1257473

По коду. Не стоит стараться сделать все как в Zend .... Можно сделать определенные классы, как пример работа с БД, файлами, функциями. И их уже использовать в обычных скриптах, таких как вход на сайт и т.д...

Спустя 14 минут, 34 секунды (14.07.2011 - 12:54) Guest написал(а):
я один заметил что в куки записывается пароль?)) причем не шифрованный)

Спустя 2 минуты, 54 секунды (14.07.2011 - 12:57) Winston написал(а):
Guest
Цитата (m4a1fox @ 14.07.2011 - 10:24)
$pass = !empty($_POST['pass'])?md5($_POST['pass']):NULL;


Спустя 57 секунд (14.07.2011 - 12:58) inpost написал(а):
Guest
А то, что SQL-inj в коде - тебя не сильно волнует?! smile.gif

Спустя 16 минут, 17 секунд (14.07.2011 - 13:14) VolDroN написал(а):
inpost где? name - фильтруется, а пароль, он итак в md5, откуда там кавычки будут (:.

Спустя 4 минуты, 45 секунд (14.07.2011 - 13:19) m4a1fox написал(а):
Итак. А ну как гляньте.
Применяю вот так

$name = !empty($_POST['name'])?trim($_POST['name']):'';
$pass = !empty($_POST['pass'])?md5($_POST['pass']):'';
$res = $autorization->enter($name, $pass);

echo $res;

Сам класс

class autorizationAdmin extends connect_Db {
private static $table = 'login';



function enter($name, $pass) {
$sql = "SELECT COUNT(*) FROM `".self::$table."`
WHERE `name` = '"
.$name."'
AND `encode` = '"
.$pass."'
"
;
if(mysql_result($this->sql($sql), 0) == 0) {
$ok = '<font color="red">Name or Pass is wrong. Please retry again.</font>';
} else {
setcookie("name", "$name", time()+3600, '/');
setcookie("pass", "$pass", time()+3600, '/');
header("Location: ./index.php");
$ok = 'Name and Pass is correct';
}
return $ok;
}
}



$autorization = new autorizationAdmin;

Знаю что делаю велосипед. Но он мой велосипед))) И еще вопрос и совет одновременно. Как вы думаете, стоит ли вот это

$name = !empty($_POST['name'])?trim($_POST['name']):'';
$pass = !empty($_POST['pass'])?md5($_POST['pass']):'';

Выносить в класс, или лучше не стоит этого делать?!

P.S 'Сделал дело - покури смело'; :)

Спустя 7 минут, 36 секунд (14.07.2011 - 13:26) alex12060 написал(а):
m4a1fox

кхе-кхе. Класс из одного метода? Это не модно)
Блин, зря я закрыл свой класс без сохраниения.
Но сделаю наводку.

Всю эту шушеру лучше разделить на методы:

 CheckLogin() // Проверка логина
CheckPassw() // Проверка пароля
SilcePassw() // Проверка пароля из БД и введенного пользователем. Наследует первые 2 проверка
__construct($login, $passw) // Устанавливает глобальные свойства логина и пароля
setCookie() // Устанавливаем куку
isCookie() // А если существует кука?
delCookie() // Тогда удалим её
login() // Логинирует пользователя, использует все вышеперечисленные методы

Спустя 5 минут (14.07.2011 - 13:31) VolDroN написал(а):
inpost, а хотя, в классе он действительно не проверяет (:
мой вариант:
<?php
class
Auth
{
public $form_name;
public $form_pass;
public $error;

__construct($name, $pass)
{
$this->form_name = !empty($name) ? mysql_real_escape_string($name) : 'Guest';
$this->form_pass = !empty($name) ? md5($pass) : null;
}
function Go()
{
$query = mysql_query("SELECT `encode` FROM `login` WHERE `name`='{$this->form_name}'");
if(mysql_num_rows($query) > 0)
{
$row = mysql_fetch_assoc($query);
if($row['encode'] == $this->form_pass)
{
$this->Cookie();
return true;
}
else
{
$this->error = '<font color="red">Неправильный пароль</font><br/>';
}
}

else
{
$this->error .= '<font color="red">Такого логина не существует</font><br/>';
return false;
}
}

private function Cookie()
{
setcookie('name', htmlspecialchars($this->form_name), time()+3600, '/');
setcookie('pass', $this->form_pass, time()+3600, '/');
}
}


$auth = new Auth($_POST['login'], $_POST['password']);
$auth->Go();
if(empty($auth->error)) header('Location: /index.php');
else echo $auth->error;
?>

не тестировал на работаспособность (:

Спустя 2 минуты, 53 секунды (14.07.2011 - 13:34) m4a1fox написал(а):
VolDroN
У меня вопрос. А зачем вот это

$query = mysql_query("SELECT `encode` FROM `login` WHERE `name`='{$this->form_name}'");
if(mysql_num_rows($query) > 0)
{
$row = mysql_fetch_assoc($query);
if($row['encode'] == $this->form_pass)
{
$this->Cookie();
return true;
}
else
{
$this->error = '<font color="red">Неправильный пароль</font><br/>';
}


Если я могу одним запросом,

$sql = "SELECT COUNT(*) FROM `".self::$table."`
WHERE `name` = '"
.$name."'
AND `encode` = '"
.$pass."'
"
;

Проверить всё?

Спустя 1 минута, 43 секунды (14.07.2011 - 13:36) m4a1fox написал(а):
alex12060
Цитата
Всю эту шушеру лучше разделить на методы:

Извиняюсь за вопрос, но почему в отдельные? не проще ли все в одном сделать?! И да, согласен, класс из одного метода, глупо, но я же вроде как ооп изучаю... поэтому так.

Собственно сам класс
class autorizationAdmin extends connect_Db {

private static $table = 'login';

function post($post) {
$post['name'] = !empty($post['name'])?mysql_real_escape_string($post['name']):'';
$post['pass'] = !empty($post['pass'])?md5($post['pass']):'';
return $post;
}

function enter($name, $pass) {
$sql = "SELECT COUNT(*) FROM `".self::$table."`
WHERE `name` = '"
.$name."'
AND `encode` = '"
.$pass."'
"
;
if(mysql_result($this->sql($sql), 0) == 0) {
$ok = '<font color="red">Name or Pass is wrong. Please retry again.</font>';
} else {
setcookie("name", "$name", time()+3600, '/');
setcookie("pass", "$pass", time()+3600, '/');
header("Location: ./index.php");
$ok = 'Name and Pass is correct';
}
return $ok;
}
}



$autorization = new autorizationAdmin;


Примею его вот так

if(isset($_POST['send'])) {

$true = $autorization->post($_POST);
$res = $autorization->enter($true['name'], $true['pass']);

echo $res;
}

Спустя 2 минуты, 31 секунда (14.07.2011 - 13:38) VolDroN написал(а):
привык (:
исправил
<?php
class
Auth
{
public $form_name;
public $form_pass;
public $error;

__construct($name, $pass)
{
$this->form_name = !empty($name) ? mysql_real_escape_string($name) : 'Guest';
$this->form_pass = !empty($name) ? md5($pass) : null;
}
function Go()
{
$query = mysql_query("SELECT COUNT(*) FROM `".self::$table."`
WHERE `name` = '{
$this->form_name}'
AND `encode` = '{
$this->form_pass}'");
if(mysql_num_rows($query) > 0)
{
$this->Cookie();
return true;
}
else
{
$this->error = '<font color="red">Неправильный пароль</font><br/>';
return false;
}
}

private function Cookie()
{
setcookie('name', htmlspecialchars($this->form_name), time()+3600, '/');
setcookie('pass', $this->form_pass, time()+3600, '/');
}
}


$auth = new Auth($_POST['login'], $_POST['password']);
$auth->Go();
if(empty($auth->error)) header('Location: /index.php');
else echo $auth->error;
?>

Спустя 18 секунд (14.07.2011 - 13:39) alex12060 написал(а):
m4a1fox

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

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

Спустя 1 минута, 39 секунд (14.07.2011 - 13:40) VolDroN написал(а):
зачем возвращать $ok = 'Name and Pass is correct';, если тебя уже перенесёт headerom на index.php?

Спустя 2 минуты, 7 секунд (14.07.2011 - 13:42) m4a1fox написал(а):
VolDroN
Цитата

зачем возвращать $ok = 'Name and Pass is correct';, если тебя уже перенесёт headerom на index.php?

Согласен. Это проверка работы скрипта была. Забыл удалить smile.gif

Спустя 17 секунд (14.07.2011 - 13:43) alex12060 написал(а):
А еще метод проверки надо замутить, да)

Спустя 42 секунды (14.07.2011 - 13:43) m4a1fox написал(а):
alex12060
Цитата
А еще метод проверки надо замутить

Проверки на что? Пустоту например? Чего то не догоняю...

Спустя 30 секунд (14.07.2011 - 13:44) gidrosoldat написал(а):
Венегрет какой-то. Все в один метод воткнул.
Я сам сейчас ООП изучаю, тоже много каких вопросов возникает (если что в личку пиши). Вообщем - попробуй взаимодействие с БД в отдельный клласс убрать - методы которого будут делать запрос и отдавать тебе ссылку на результат. Запись в куки тоже можно отдельным классом сделать и вызывать с помощью композиции.

Спустя 2 минуты, 40 секунд (14.07.2011 - 13:47) gidrosoldat написал(а):
Цитата (m4a1fox @ 14.07.2011 - 10:43)
alex12060
Цитата
А еще метод проверки надо замутить

Проверки на что? Пустоту например? Чего то не догоняю...

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

Спустя 3 минуты, 30 секунд (14.07.2011 - 13:50) VolDroN написал(а):
Вообще, по хорошему, надо пару классов создать:
1. Бд (запросы)
2. Проверка данных (проверка на пустоту, числа, буквы, длину и.т.д.)
3. Работа с печеньками.

И там уже в пару строк можно написать авторизацию (:

Спустя 7 минут, 42 секунды (14.07.2011 - 13:58) m4a1fox написал(а):
VolDroN
Ха, так просто)))) Ладно! Буду дальше эксперементировать с классом.

Спустя 1 минута, 53 секунды (14.07.2011 - 14:00) VolDroN написал(а):
Цитата
Извиняюсь за вопрос, но почему в отдельные? не проще ли все в одном сделать?!

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

Спустя 9 минут, 58 секунд (14.07.2011 - 14:10) m4a1fox написал(а):
VolDroN
Да да да да.... В первых строчках всех книг по ооп написано.

Спустя 5 минут, 43 секунды (14.07.2011 - 14:15) m4a1fox написал(а):
А ну как гляньте. Вот так. Спасибо VolDroN

class autorizationAdmin extends connect_Db {

private static $table = 'login';
public $name;
public $pass;


function __construct($name, $pass) {
$this->name = !empty($name)?mysql_real_escape_string($name):'Guest';
$this->pass = !empty($pass)?md5($pass):NULL;
}

function check() {
echo $this->pass;

}

function enter() {
$sql = "SELECT COUNT(*) FROM `".self::$table."`
WHERE `name` = '"
.$this->name."'
AND `encode` = '"
.$this->pass."'
"
;
if(mysql_result($this->sql($sql), 0) == 0) {
$ok = '<font color="red">Name or Pass is wrong. Please retry again.</font>';
} else {
header("Location: ./index.php");
$ok = 'Name and Pass is correct';
}
return $ok;
}
}


Ошибку не выдает, но и не перенаправляет??????
Применюю вот так

if(isset($_POST['send'])) {
$autorization = new autorizationAdmin($_POST['name'], $_POST['pass']);
$res = $autorization->enter();

echo $res;

}

Спустя 3 минуты, 36 секунд (14.07.2011 - 14:19) Winston написал(а):
neadekvat когда-то уже писал тебе, что это лишнее
Цитата (m4a1fox @ 14.07.2011 - 14:15)
class autorizationAdmin extends connect_Db {

Сделай в классе connect_Db методы статическими, и обращайся к ним,
не так
Цитата (m4a1fox @ 14.07.2011 - 14:15)
if(mysql_result($this->sql($sql), 0) == 0) {

А так
if(mysql_result(connect_Db :: sql($sql), 0) == 0)

Спустя 11 секунд (14.07.2011 - 14:19) m4a1fox написал(а):
Господа. Без нервов. Я сам дурак! Нашел где не прав!



Спустя 55 секунд m4a1fox написал(а):
PHPprogramer
Цитата
А так if(mysql_result(connect_Db :: sql($sql), 0) == 0)

А! Хорошо! Сейчас так и сделаю. А не подскажите почему так лучше????

Спустя 5 минут, 52 секунды (14.07.2011 - 14:25) Guest написал(а):
inpost
я бегло просмотрел)

PHPprogramer
поэтому не увидел md5 ))

Спустя 3 минуты, 22 секунды (14.07.2011 - 14:28) VolDroN написал(а):
1. Потому что удобнее,
2. Не надо наследовать класс для того что бы сделать запрос в бд.
3. Не надо создавать экземпляр класса бд если ты пишеш код вне класса, ради того что бы отправить запрос.
4. Не надо думать о том, что ты случайно можешь занять у себя в новом классе метод sql, и потом будешь мучиться "почему не работает".

Спустя 15 минут, 22 секунды (14.07.2011 - 14:44) alex12060 написал(а):
m4a1fox

ррр все равно не то ><


public $name;
public $pass;


нет нет нет, надо делать их приватными.


private $name = '';
private $pass = '';


Вот таблицу свою в мускуле жалко всем показывать, а логин и пароль - нет :)


function check() {
echo $this->pass;

}


Это тут к какому коню? О_О

Спустя 53 минуты, 39 секунд (14.07.2011 - 15:37) VolDroN написал(а):
alex12060 это похоже у меня было.
А смысл? Я вот не понимаю public, private, кому нужен этот пароль и логин, при том что пароль в md5 будет?
Да и как это можно использовать? (я про то что пароль например будет pablic)

Спустя 1 минута, 4 секунды (14.07.2011 - 15:38) m4a1fox написал(а):
Цитата
Это тут к какому коню? О_О

Упс... Проверка вылезла....



Спустя 1 минута, 16 секунд m4a1fox написал(а):
alex12060
Цитата
нет нет нет, надо делать их приватными.

Спасибо! Поправил!

Спустя 28 минут, 47 секунд (14.07.2011 - 16:07) m4a1fox написал(а):
Продалжаем о наших баранах.... Собственно класс теперь

class autorizationAdmin extends connect_Db {

private static $table = 'login';
private $name;
private $pass;


function __construct($name, $pass) {
$this->name = !empty($name)?mysql_real_escape_string($name):'Guest';
$this->pass = !empty($pass)?md5($pass):NULL;
}

function enter() {
$sql = "SELECT COUNT(*) FROM `".self::$table."`
WHERE `name` = '"
.$this->name."'
AND `encode` = '"
.$this->pass."'
"
;
if(mysql_result(connect_Db::sql($sql), 0) == 0) {
$ok = '<font color="red">Name or Pass is wrong. Please retry again.</font>';
} else {
$this->setCookie();
header("Location: ./index.php");
}
return $ok;
}

function setCookie() {
setcookie("name", $this->name, time()+3600, '/');
setcookie("pass", $this->pass, time()+3600, '/');
}
}



Применяется класс вот так

if(isset($_POST['send'])) {
$autorization = new autorizationAdmin($_POST['name'], $_POST['pass']);
$res = $autorization->enter();
echo $res;
}


Собственно теперь вопрос стоит о том, что бы написать метод уничтожения cookie.
Наверно как-то так

function delCookie() {
setcookie("name", "", time() - 60, '/');
setcookie("pass", "", time() - 60, '/');
}

Но не могу, понять как его задействовать....

Спустя 14 минут, 32 секунды (14.07.2011 - 16:22) m4a1fox написал(а):
Походу вопрос снимается.... вроде разобрался где его использовать.

Спустя 7 минут, 41 секунда (14.07.2011 - 16:29) VolDroN написал(а):
Ты бы в печеньках не md5 пароля использовал, а код, который к паролю отношения не имеет.
Если у меня будут твои кукисы, то узнать пароль можно будет за 20 секунд, на cmd5.ru

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

Спустя 23 минуты, 40 секунд (14.07.2011 - 16:53) Gradus написал(а):
Цитата
то узнать пароль можно будет за 20 секунд

только если он подобен 'qwerty'

Спустя 28 минут, 12 секунд (14.07.2011 - 17:21) m4a1fox написал(а):
VolDroN
Цитата
то узнать пароль можно будет за 20 секунд, на cmd5.ru

А если я соль добавлю, то - удачи?!

Спустя 2 минуты, 40 секунд (14.07.2011 - 17:24) Gradus написал(а):
m4a1fox, такого плана ?
md5('qwerty'.'sol1');

то да удачи, только и тебе это помешает.

Спустя 2 минуты, 41 секунда (14.07.2011 - 17:27) alex12060 написал(а):
VolDroN

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

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

А то, что пароль мд5 не гарантирует то, что он будет взломан. Брутануть пароль - дело несложное, особенно во время, когда люди специально стараются записать простой пароль. Подобрать 7-значный пароль [a-z0-9] - ну от силы минут 20-25

Спустя 18 минут, 51 секунда (14.07.2011 - 17:46) m4a1fox написал(а):
Gradus
alex12060
Ладно, господа. Мы откланились от намеченного курса. alex12060 Как вы и советовали, сделал все по отдельности. только вот столкнулся с проблемкой, а именно с
delCookie

и с
checkCookie

А именно вот в каком моменте.
Советуюсь с вами, скажите, вот такая проверка реально - лажа

<?php
if(!isset($_COOKIE['name'])){
header('location: ./index.php?page=log');
die;
} else {
if($_COOKIE['name'] != 'admin' && $_COOKIE['pass'] != md5('pass'));
header('location: ./index.php?page=log');
die;
}
?>

Hellow wold


Как вы считаете, как ее можно подшаманить??? Спасибо!

Спустя 20 минут, 45 секунд (14.07.2011 - 18:06) alex12060 написал(а):
m4a1fox


private function isCookie() {

$info = array();

if (isset($_COOKIE)) {
$info[] = isset($_COOKIE['login']) ? $_COOKIE['login'] : null; // Если есть логин - заносим, иначе - нул
$info[] = isset($_COOKIE['passw']) ? $_COOKIE['passw'] : null; // Если есть пароль - заносим, иначе - нул

} else {
return false;
}

return (in_array('null', $info)) ? false : true; // Если есть нул, значит, либо пользователь не авторизован
// и надо авторизовать, или чего-то не хватает в куках
// иначе, пользователь авторизован.

}

private function delCookie() {
if ($this->isCookie()) {
unset($_COOKIE['login']);
unset($_COOKIE['passw']);

header('Location: index.php?inowexit');
} else {
// Нет нифига в куках

$this->auth($this->login, $this->passw);

}

}


Спустя 1 минута, 47 секунд (14.07.2011 - 18:08) alex12060 написал(а):

if($_COOKIE['name'] != 'admin' && $_COOKIE['pass'] != md5('pass'));
header('location: ./index.php?page=log');
die;


хм, вроде лажа :)
Надо соль не забыть прикурить тебе, иначе, брутить можно.

Спустя 5 минут, 23 секунды (14.07.2011 - 18:13) m4a1fox написал(а):
alex12060
Ээээээ.... маленький вопросик. Во первых спасибо. Это в насамом деле не очень сложно, но есть заминка, мне то необходимо проверить (сверить) $_COOKIE с именем и парролем-то.



Спустя 34 секунды m4a1fox написал(а):
alex12060
Цитата
Надо соль не забыть прикурить тебе, иначе, брутить можно.

Да да. Про соль я в курсе. Тут бы так разобраться. smile.gif

Спустя 9 минут, 31 секунда (14.07.2011 - 18:23) alex12060 написал(а):
Тут заводишь 2 метода, один -
checkCookie()
второй
getInfoFromDB()

оба без параметров

Первый выступает главным, наследует проверку существавания куки (метод isCookie)
А в getInfoFromDB() ты просто создаешь запрос к БД, который пробует вытаскивать, допустим, ИД из базы данных. Зарпос примерно такой:


SELECT `id` FROM `users` WHERE `login`=$login AND `passw`=$passw LIMIT 1;


И если вытащилось, значит пользователь прошел проверку, иначе, кидай вникуда.
Ах да, $login - куковское значение, $passw - куковское значение.

А если это админка, советую сделать привязку к ИП. А еще, при неактивности более 1-4 минут - выкидывать отседа.

Спустя 9 минут, 28 секунд (14.07.2011 - 18:32) m4a1fox написал(а):
Вот так сделал

function emptyCookie() {
$info = array();
if(isset($_COOKIE)) {
$info['name'] = isset($_COOKIE['name'])?$_COOKIE['name']:NULL;
$info['pass'] = isset($_COOKIE['pass'])?$_COOKIE['pass']:NULL;
}
if($info['name'] != 'admin' || $info['pass'] != md5('oracle')) {
return header("Location: ./index.php?page=log");
}
}





Спустя 5 минут, 8 секунд m4a1fox написал(а):
Наверняка через Бд будет гораздо красивее.... Спасибо за направление.

Спустя 22 минуты (14.07.2011 - 18:54) VolDroN написал(а):
m4a1fox а нечего что там, в базе несколько десятков миллиардов вариантов паролей? там и sldfkj324 какой-нибудь есть :/
а ты со своей солью (:

Спустя 4 минуты (14.07.2011 - 18:58) m4a1fox написал(а):
VolDroN
Ну дык, и не facebook я делаю....)

Спустя 14 часов, 31 минута, 3 секунды (15.07.2011 - 09:29) VolDroN написал(а):
ну создавать для каждой аутентификации свой ключ, сохранять его в бд вместе с айди пользователя, не на много сложнее, но на много безопаснее чем хранить в кукисах пароль.
И сверять постоянно не пароль и логин - равен ли он в бд с настоящим логином и паролем, а проверять, существует ли в бд ключ с таким названием как в $_cookie['key'].

Спустя 46 минут, 29 секунд (15.07.2011 - 10:16) m4a1fox написал(а):
alex12060
Цитата
Тут заводишь 2 метода, один -
checkCookie()
второй
getInfoFromDB()

оба без параметров

Первый выступает главным, наследует проверку существавания куки (метод isCookie)
А в getInfoFromDB() ты просто создаешь запрос к БД, который пробует вытаскивать, допустим, ИД из базы данных. Зарпос примерно такой:


SELECT `id` FROM `users` WHERE `login`=$login AND `passw`=$passw LIMIT 1;


И если вытащилось, значит пользователь прошел проверку, иначе, кидай вникуда.
Ах да, $login - куковское значение, $passw - куковское значение.


Сделал как вы и посоветовали. Спасибо!
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.