X   Сообщение сайта
(Сообщение закроется через 3 секунды)



 

Здравствуйте, гость (

| Вход | Регистрация )

2 страниц V   1 2 >
Открыть тему
Тема закрыта
> Кнопка "Запомнить пароль"
Валериан
Валериан
Topic Starter сообщение 10.8.2010, 13:58; Ответить: Валериан
Сообщение #1


У меня на сайте есть форма для логина, но я не могу понять, как сделать кнопку "Запомнить пароль"? Какой принцип ее действия? Для этого достаточно одного PHP и HTML?
0
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Letmetouchyou
Letmetouchyou
сообщение 10.8.2010, 14:04; Ответить: Letmetouchyou
Сообщение #2


Валериан, куки
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
SOKOJI
SOKOJI
сообщение 10.8.2010, 14:04; Ответить: SOKOJI
Сообщение #3


(Валериан @ 10.8.2010, 16:58) *
У меня на сайте есть форма для логина, но я не могу понять, как сделать кнопку "Запомнить пароль"? Какой принцип ее действия? Для этого достаточно одного PHP и HTML?


Да, достаточно. В php проверять, пришла ли эта переменная, и если она пришла, то устанавливать куки.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Валериан
Валериан
Topic Starter сообщение 10.8.2010, 17:45; Ответить: Валериан
Сообщение #4


А если у меня только сессии - пойдет?
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Flok
Flok
сообщение 10.8.2010, 18:18; Ответить: Flok
Сообщение #5


мой пример авторизации по кукам и сессиям (только на сессии нельзя создать, ибо сессия убьётся после закрытия браузера):

[php]if ((isset($_POST['login']) OR isset($_COOKIE['login'])) AND !isset($_SESSION['id'])) {
# пояснение:
# если пользователь отправляет данные через форму
# или данные хранятся в куках, при этом пользователь не
# авторизирован на сайте, то делаю выборку из базы:

#присваиваем переменным значения из куков
if (isset($_COOKIE['login'])) {$aut_login=$_COOKIE['login'];}
if (isset($_COOKIE['password'])) {$aut_password=$_COOKIE['password'];}//в куках хранится хэш пароля
# ну или из формы.
# я сделал такой порядок, что бы при наличии данных из формы
# куки ни на что не влияли, и их можно было обновить в дальнейшем
if (isset($_POST['login'])) {$aut_login=$_POST['login'];}
if (isset($_POST['password'])) {$aut_password=md5(md5($_POST['password']));} //из формы пришёл обычных пароль. шифруем

$db = mysql_connect ("localhost","мой_логин","мой_пароль") or die();
mysql_select_db ("моя бд",$db) or die();
$query = mysql_query('SELECT * FROM users WHERE login=\''.$aut_login.'\' AND password = \''.$aut_password.'\'') or die();
$a = mysql_fetch_array($query);
if (isset($a[0])) {
# если вернулась хоть одна строка с пользователем ...
$_SESSION['id'] = $a['id'];
$_SESSION['login'] = $a['login'];
#вбиваем его данные в сессии
setcookie('login', $a['login'], time()+15*24*60*60);
setcookie('password', $aut_password, time()+15*24*60*60);
# и обновляем куки.

} else {
echo 'неправильный логин или пароль';
}
}[/php]замечу, что у моего хостера стоит своя защита от инъекций, поэтому проверку данных из форм я не провожу.

заодно прошу профессионалов оценить мой алгоритм и может быть что-нибудь посоветовать )
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Letmetouchyou
Letmetouchyou
сообщение 10.8.2010, 18:35; Ответить: Letmetouchyou
Сообщение #6


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

равила модульности. Оно звучит так: «Простые блоки связывайте друг с другом ясными и понятными интерфейсами» (Rule of Modularity: Write simple parts connected by clean interfaces).

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

Два примера из реальной жизни: 1) классический домашний ПК из системного блока и монитора 2) ноутбук. К примеру, на обоих погас экран. Причина может быть в чем угодно, как мы понимаем. Но в случае домашнего ПК легко проверить первое предположение: а работает ли монитор на другом компьютере? если не работает — причина в мониторе. Если да — причина в компьютере. Далее можно попробовать видеокарту на другом компьютере — и сразу понять, в ней дело или нет. Аналогично дело обстоит с клавиатурой, мышью…


я это к тому, что лутше, удобнее, униварсальнее все таки использовать ООП или уже набор обычных функций)


(Flok @ 10.8.2010, 21:18) *
***$db*=*mysql_connect*("localhost","мой_логин","мой_пароль")*or*die();*****mysql_select_db*("моя*бд",$db)*or*die();


а для коннекта и дисконнекта использовать класс, со статическимим методами =)
(Flok @ 10.8.2010, 21:18) *
**$query*=*mysql_query('SELECT***FROM*users*WHERE*login=\''.$aut_login.'\'*AND*password*=*\''.$aut_password.'\'')


тут можно в конце добавть LIMIT 1;

(Flok @ 10.8.2010, 21:18) *
*$a*=*mysql_fetch_array($query);****if*(isset($a[0]))*{*



тут, если например нету пользоватлей, то вернет еррор, точнее выполненеи скрипта будет прекрашено, если не установлен error_reporting;
праильнее делать так (образо):

result = mysql_query();
if(result and mysql_num_rows()==1)



количество строк выборки должно быть строго равно 1.

__
2 раза md5 - безтолку )
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
SOKOJI
SOKOJI
сообщение 10.8.2010, 18:53; Ответить: SOKOJI
Сообщение #7


http://pyha.ru/articles/php/auth/ - радуйтесь, детишечки :D
PS. Я вместо двойного мд5 соль юзаю :) Там же в статье расписано что это и с чем едят.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Letmetouchyou
Letmetouchyou
сообщение 10.8.2010, 19:13; Ответить: Letmetouchyou
Сообщение #8


SOKOJI, читал ето год назад гдето ))
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Flok
Flok
сообщение 10.8.2010, 19:31; Ответить: Flok
Сообщение #9


(Letmetouchyou @ 10.8.2010, 21:35) *
а для коннекта и дисконнекта использовать класс, со статическимим методами =)

если б я ещё знал, что это такое, было бы вообще прекрасно )
сейчас я знаю только о функциональной составляющей php, ибо учился по курсам Попова (его двизию :censored:) сейчас взял нормальную книжку, буду переучиваться )

Letmetouchyou,за подсказки спасибо )
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Mulder_hb
Mulder_hb
сообщение 10.8.2010, 21:30; Ответить: Mulder_hb
Сообщение #10


(Валериан @ 10.8.2010, 20:45) *
А если у меня только сессии - пойдет?

Сессия - это особая кука. Так что если у вас есть сессия, то и кука будет работать.
[PHP]if ((isset($_POST['login']) OR isset($_COOKIE['login'])) AND !isset($_SESSION['id'])) {[/PHP]
Так не проверяют. Проверяют только элементы массива $_COOKIE. Если данные есть идет проверка и расшифровка данных из кук. Если они верны, то авторизация. Если элементов массива кук нет, то появляется страница входа и потом снимаются данные из массива $_REQUEST.
[PHP]$aut_login=$_POST['login'];
$aut_password=md5(md5($_POST['password']));
[/PHP]
Никогда не передавайте в куку данные так, как они подставляются в бд. Сначала хешируйте данные по ключу, потом, желательно, серилизуйте и уже потом отправляйте пользователю. Когда снимаете данные из кук, проводите обратные операции - десириализация и расшифровка.
[PHP]$query = mysql_query('SELECT * FROM users WHERE login=\''.$aut_login.'\' AND password = \''.$aut_password.'\'') or die();[/PHP]
Так выглядит понятнее:
[PHP]$query = mysql_query("SELECT `id` FROM `users` WHERE `login` = '".$aut_login."' AND `password` = '".$aut_password."'") or die();[/PHP]
Никогда не ставьте звездочку, если не собираетесь использовать все поля в скрипте.
[PHP]if (isset($a[0])) {[/PHP]
Так не проверяют. Достаточно проверить всю переменную:
[PHP]if ($a) {[/PHP]
[PHP]setcookie('login', $a['login'], time()+15*24*60*60);
setcookie('password', $aut_password, time()+15*24*60*60);[/PHP]
Период установки кук проще и удобней считать отдельно заранее.
(Letmetouchyou @ 10.8.2010, 21:35) *
я это к тому, что лутше, удобнее, униварсальнее все таки использовать ООП или уже набор обычных функций)

Исправить ошибки и будет отдельный модуль. Ничего в приведенном скрипте лишнего нет. Если развивать функциональность дальше, то да желательно ООП.
(Letmetouchyou @ 10.8.2010, 21:35) *
а для коннекта и дисконнекта использовать класс, со статическимим методами =)

Зачем? Аргументируйте зачем в данной ситуации использовать класс да и еще со статическими методами? Разве только это большой будущий сайт. И то с большой натяжкой. Все решает разработчик.
(Letmetouchyou @ 10.8.2010, 21:35) *
тут можно в конце добавть LIMIT 1;

А что на сайте могут существовать более одного пользователя с уникальным именем :sarcastic: ?
(Letmetouchyou @ 10.8.2010, 21:35) *
тут, если например нету пользоватлей, то вернет еррор, точнее выполненеи скрипта будет прекрашено, если не установлен error_reporting;

В корне не верно. Если пользователя нет, то if($a) будет эквивалентен if(false) и скрипт пойдет по другой ветке.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
2 страниц V   1 2 >
Открыть тему
Тема закрыта
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0


Свернуть

> Похожие темы

  Тема Ответов Автор Просмотров Последний ответ
Открытая тема (нет новых ответов) Требуется помощь по сайту на "ВордПресс"
Закрылся доступ в панель администратора
12 Tia2 1527 25.3.2024, 6:54
автор: Skyworker
Открытая тема (нет новых ответов) ✅ sms.chekons.com - ⭐ Сервис для получения SMS на реальные номера USA "Non-VoIP, безлим SMS, API" ⭐
Сервис для получения SMS на реальные номера USA
10 Chekon 3582 24.3.2024, 14:15
автор: Chekon
Открытая тема (нет новых ответов) ⭐⭐⭐ Google Voice | Gmail - OLD аккаунты "SMS и звонки" ⭐⭐⭐
12 Chekon 3817 24.3.2024, 13:56
автор: Chekon
Опрос (нет новых голосов) Опрос: Результаты в упражнении "Жим лёжа" у вэбмастеров
35 Room 4464 13.3.2024, 13:10
автор: Room
Открытая тема (нет новых ответов) "Лежащий" домен - 10 лет. Продать?
8 Wolfhound 2382 5.3.2024, 3:22
автор: Liudmila


 



RSS Текстовая версия Сейчас: 29.3.2024, 1:16
Дизайн