id и activ мне надо взять из бд в итоге должно получитса что то типа: пройдите по ссылке
http://moysayt.com/activ.php?=id&уникальный__ключ
но как это сделать не соображу может кто посоветует или покажет пример
С Уважением
Спустя 1 час, 4 минуты, 48 секунд (18.08.2006 - 07:47) zilogo написал(а):
Думаю можно хранить в базе только id.
Берешь какой-нить ключ, напр. 'sdkje2hi34192x32' хэшишь с id и посылаешь юзеру.
Потом
mysql_query("update users set users.`registred`='Y' where users.`registred`='N' and md5(concat(users.`id`, '$key'))='$hash'");
Берешь какой-нить ключ, напр. 'sdkje2hi34192x32' хэшишь с id и посылаешь юзеру.
Потом
mysql_query("update users set users.`registred`='Y' where users.`registred`='N' and md5(concat(users.`id`, '$key'))='$hash'");
Спустя 20 часов, 27 минут, 48 секунд (19.08.2006 - 04:15) aziz написал(а):
QUOTE
Берешь какой-нить ключ, напр. 'sdkje2hi34192x32' хэшишь с id и посылаешь юзеру.
если сечстно я только учусь и пока с хешом не сталкивался можно ли где нибудь увидеть примеры как это делаетса
Спустя 5 часов, 34 минуты, 42 секунды (19.08.2006 - 09:50) zilogo написал(а):
md5('sdwj2mocm2omc823'.$id)
Спустя 18 минут (19.08.2006 - 10:08) vasa_c написал(а):
Еще вариант есть, вообще ничего не заносить в базу в начале (чтобы не захламлять), а высылать на мыло ссылку, типа:
/registr.php?login=qwerty&password=qwerty&key=034958467845754756756
Где key — хэш, завязанный на логине, пароле и какой-либо секретной строке, например:
$key = md5( $login.$password.'Секретная строка' );
А уже когда пользователь приходит по этой ссылке, регистрировать пользователя с логином/паролем из нее.
/registr.php?login=qwerty&password=qwerty&key=034958467845754756756
Где key — хэш, завязанный на логине, пароле и какой-либо секретной строке, например:
$key = md5( $login.$password.'Секретная строка' );
А уже когда пользователь приходит по этой ссылке, регистрировать пользователя с логином/паролем из нее.
Спустя 2 часа, 8 минут, 26 секунд (19.08.2006 - 12:16) Drachoon написал(а):
Зная хэш и то что $key генерируется таким способом можно без труда восстановить и $password и 'Секретная строка' c помощю rainbow tables. Лучше делать так $key = md5(md5( $login.$password.'Секретная строка' )); // хотя если подберётся первый уровень то и второй уровень тоже раздраконить не составит ртуда, но помните что чем длиннее хешируемая стока тем больше шанс найдти коллизию. В данном случае квадратный хэш сломать будет сложнее потому что есть шансы что найденная коллизия не будет соответствовать нужной строке.
Спустя 17 часов, 40 минут, 29 секунд (20.08.2006 - 05:57) aziz написал(а):
Может кто знает где об этом всё подробно описано,желательно м примерами:(
Спустя 4 дня, 19 часов, 50 минут, 57 секунд (25.08.2006 - 01:48) LiZ@RD написал(а):
aziz, о чем? о хешировании?)) хеш-функции - функции необратимого шифрования (т.е. по результату работы функции невозможно найти исходное значение)... функция для хеширования - md5() (не только, конечно, но лучше юзай эту ;) )
Спустя 10 часов, 29 минут, 31 секунда (25.08.2006 - 12:17) phps.ru написал(а):
Самый нормальный способ, это держать таблицу юзеров в таком виде:
id | login | pass | ... | status | activate
.............
.............
.............
После регистрации отправляешь линк следующего вида:
http://.../activate.php?code=blablabla (где blablabla егошний код в ячейке activate)
Далее делаешь SQL запрос обновляющий status с нуля (пользователь не активирован) до единица для поля где activate = $_GET['code']... Самый простой способ, тем не менее работает...
Потом можешь написать крон скрипт который будет чистить бд от неактивироанных в течении допустим месяца аккаунтов....
id | login | pass | ... | status | activate
.............
.............
.............
После регистрации отправляешь линк следующего вида:
http://.../activate.php?code=blablabla (где blablabla егошний код в ячейке activate)
Далее делаешь SQL запрос обновляющий status с нуля (пользователь не активирован) до единица для поля где activate = $_GET['code']... Самый простой способ, тем не менее работает...
Потом можешь написать крон скрипт который будет чистить бд от неактивироанных в течении допустим месяца аккаунтов....
Спустя 36 минут, 26 секунд (25.08.2006 - 12:54) zilogo написал(а):
Непонимаю зачем некоторые предлагают хэштровать имя+пароль+ключ или держать поле activate в БД.
Самый лучший на мой взгляд метод:
Допустим в БД есть таблица users и в ней поля idUser, login, password, registred
Поле из БД: registred enum('N', 'Y') not null # 'Y' - пользователь прошел регистрацию.
$key = 'sdkje2hi34192x32'; // ключ для хэширования. Храним в файле выше public_html и считываем (или храним прямо в скрипте)
Далее пользователь регистрируется и мы получаем его id
$idUser = mysql_insert_id($res);
Далее хэштруем с нашим ключем
$hash = md5($idUser.$key);
Далее отправляем юзеру ссылку вида
http://www.phpforum.ru/autor.php?id=$idUser&hash=$hash
Далее в скрипте autor.php получаем $idUser и $hash
Далее регистрируем юзера, т.е. присваиваем `registred`='Y'
mysql_query("update users set users.`registred`='Y' where users.`registred`='N' and md5(concat(users.`id`, '$key'))='$hash'");
Т.е. перебираем все поля с незарегистрированными юзерами чей хэш совпадет: md5(concat(users.`id`, '$key'))='$hash'")
Самый лучший на мой взгляд метод:
Допустим в БД есть таблица users и в ней поля idUser, login, password, registred
Поле из БД: registred enum('N', 'Y') not null # 'Y' - пользователь прошел регистрацию.
$key = 'sdkje2hi34192x32'; // ключ для хэширования. Храним в файле выше public_html и считываем (или храним прямо в скрипте)
Далее пользователь регистрируется и мы получаем его id
$idUser = mysql_insert_id($res);
Далее хэштруем с нашим ключем
$hash = md5($idUser.$key);
Далее отправляем юзеру ссылку вида
http://www.phpforum.ru/autor.php?id=$idUser&hash=$hash
Далее в скрипте autor.php получаем $idUser и $hash
Далее регистрируем юзера, т.е. присваиваем `registred`='Y'
mysql_query("update users set users.`registred`='Y' where users.`registred`='N' and md5(concat(users.`id`, '$key'))='$hash'");
Т.е. перебираем все поля с незарегистрированными юзерами чей хэш совпадет: md5(concat(users.`id`, '$key'))='$hash'")
Спустя 3 часа, 24 минуты, 34 секунды (25.08.2006 - 16:18) phps.ru написал(а):
zilogo,
твой вариант лучьше моего, но автор просил без использования хешей... как видно по его фразе "я только учусь" человеку нужно показывать самые наипростейшие примеры, для того, что бы он мог в будующем сам их модернизировать и улучшать, хоть и правильно учить изначально кодить логично и корректно.
твой вариант лучьше моего, но автор просил без использования хешей... как видно по его фразе "я только учусь" человеку нужно показывать самые наипростейшие примеры, для того, что бы он мог в будующем сам их модернизировать и улучшать, хоть и правильно учить изначально кодить логично и корректно.
Спустя 1 час, 7 минут, 48 секунд (25.08.2006 - 17:26) vasa_c написал(а):
QUOTE
Непонимаю зачем некоторые предлагают хэштровать имя+пароль+ключ или держать поле activate в БД.
Самый лучший на мой взгляд метод:
Самый лучший на мой взгляд метод:
Если пойти дальше, то в БД можно вообще ничего не держать.
Какой смысл всей этой активации через мыло? Чтобы базу не забили всякие чудики и боты. Так зачем забивать ее неактивированными пользователями?
Можно получить от пользователя его мыло и желаемые логин/пароль, на их основании создать по известному только серверу алгоритму строку (тот же md5( $email.$login.$password.'Секретная строка' );) и отправить юзеру на мыло письмо с сылкой:
www. phpforum.ru/activate.php?email=petya@mail.ru&login=petya&password=qwerty&hash=08932573657436549312143534
Пользователь активирует ее, а в activate.php проверяется соответствие логина/пароля с hash и если все пучком, тогда уже регистрируется пользователь.
Имхо, вариант, тоже заслуживающий право на жизнь.
Спустя 29 минут, 45 секунд (25.08.2006 - 17:56) phps.ru написал(а):
в твоем варианте все равно придется держать в бд столбец с значением активирован аккаунт или нет...
или ты предлагаешь ссылку на регистрацию делать такой (если данные собираются с начала):
acticate.php?email=petya@mail.ru&username=petya&fio=Бобров Иван Иваныч&password=qwert&icq=000000000&aim=135135&jabber=245245&phone=+741535....... итд итп...
это бредовый вариант... думаю правильнее сделать так:
человек заходит на сайт, фтыкает линк регистрироваться, заполняет все данные в том числе и мыло, переходит на второй шаг (введенные им данные записались либо в сессию либо прям в HTML в полях hidden хранятся) где у него просится ввести код активации который пришол на мыло по алгоритму md5($email.$login.$pass.$secret_key).... и только после того как чувак ввел код активации с мыла идет проверка и запись в бд если все ок... у данного варианта есть НО:
Бывает что мыло задерживается в доставке, человеку придется держать окно браузера открытым.
Лучше все же держать поле состояния активирования в бд, причем администратор в любой момент при помощи этого сможет блокировать юзеров на сайте...
или ты предлагаешь ссылку на регистрацию делать такой (если данные собираются с начала):
acticate.php?email=petya@mail.ru&username=petya&fio=Бобров Иван Иваныч&password=qwert&icq=000000000&aim=135135&jabber=245245&phone=+741535....... итд итп...
это бредовый вариант... думаю правильнее сделать так:
человек заходит на сайт, фтыкает линк регистрироваться, заполняет все данные в том числе и мыло, переходит на второй шаг (введенные им данные записались либо в сессию либо прям в HTML в полях hidden хранятся) где у него просится ввести код активации который пришол на мыло по алгоритму md5($email.$login.$pass.$secret_key).... и только после того как чувак ввел код активации с мыла идет проверка и запись в бд если все ок... у данного варианта есть НО:
Бывает что мыло задерживается в доставке, человеку придется держать окно браузера открытым.
Лучше все же держать поле состояния активирования в бд, причем администратор в любой момент при помощи этого сможет блокировать юзеров на сайте...
Спустя 2 минуты, 41 секунда (25.08.2006 - 17:58) vasa_c написал(а):
Если при регистрации тр*цензура*ется множество параметров, то можно разбить ее на 2 шага:
1. email, логин, пароль.
Здесь отправляется письмо и все такое.
2. Ссылка в письме ведет на страницу со 2-м шагом, где уже вводяться ФИО и вся остальная лабуда.
1. email, логин, пароль.
Здесь отправляется письмо и все такое.
2. Ссылка в письме ведет на страницу со 2-м шагом, где уже вводяться ФИО и вся остальная лабуда.
Спустя 8 минут, 45 секунд (25.08.2006 - 18:07) phps.ru написал(а):
как варинт - жив...
на практике проще и разумнее пожертвовать все же одним полем таблички =)
на практике проще и разумнее пожертвовать все же одним полем таблички =)
Спустя 4 месяца, 9 дней, 21 час, 18 минут, 43 секунды (5.01.2007 - 16:26) aziz написал(а):
Хотелось бы узнать ваше мнение
<? session_start(); session_register("secret_number"); if (intval($_SESSION["secret_number"])<1000) { srand(doubleval(microtime())); $_SESSION["secret_number"]=rand(1000,9999); //echo $_SESSION["secret_number"]=rand(1000,9999); } ?> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html > <head> <meta http-equiv="Content-Type" content="text/html; charset=windows-1251"> <title>Скрипт регистрации (+MySQL)</title> </head> <body bgcolor="#FFFFFF"> <!--Форма регистрации--> <form action="" method="post" name="reg"> <table align="center" cellpadding="0" > <tr> <td colspan="2"> Регистрационная форма</td> </tr> <tr> <td width="91">Ваш логин:</td> <td width="233"><input name="login" type="text" size="10"></td> </tr> <tr> <td>Ваш пароль:</td> <td><input name="passwd" type="password" size="10"></td> </tr> <tr> <td height="24">Ваш email:</td> <td><input type="email" name="email" size="10"></td> </tr> <tr> <td height="32">Ваш IP:</td> <td><?php echo $_SERVER['REMOTE_ADDR'];?> <input name="hiddenField" type="hidden" value=<?php echo $_SERVER['REMOTE_ADDR'];?> ></td> </tr> <tr> <td height="15">Введите код: </td> <td><img src='code.php?<?=doubleval(microtime());?>' width=101 height=26 vspace=5></td> </tr> <tr> <td height="15"> </td> <td><label> <input name="secretcode" type="text" id="secretcode"> </label></td> </tr> <tr> <Td><input type="submit" name="reggist" value="Далее"> <label></label></td> <Td><div align="right"> <input type="reset" name="Reset" value="Сброс"> </div></td> </tr> </table> </form> <?php //Если кнопка была нажата то проверяем данные if(isset($_POST['reggist'])) { $login=$_POST['login']; $passwd=$_POST['passwd']; $email=$_POST['email']; $ip=$_SERVER['REMOTE_ADDR']; $date=date("d.M Y"); if (eregi("[^a-zA-Z0-9_-]", $login)) { echo "Слово может состоять только из больших и маленьких латинских букв, цифр, знака тире -, и подчеркивания _!"; } else { if(strlen($login) < 4 || strlen($login) > 12) { echo "Слово должнобыть не длинее 12 и не короче 4 симболов!"; } else { if ($login=="") { //если поле логина пустое выдаём сообщение echo "Вы не ввели логин! "; } else { // проверяем код на картинке с введённм $error=0; if ($_POST["secretcode"]!=$_SESSION["secret_number"] || intval($_POST["secretcode"])==0) $error=1; if ($error==0) { $_SESSION["secret_number"]=rand(1000,9999); }// если не верно сообщаем... if ($error==1) print "<font color=red>Число с картинки введено неверно</font>"; else { //иначе проверяем правильность заполнения email адреса if (!preg_match("/[0-9a-z_]+@[0-9a-z_^.]+.[a-z]{2,3}/i", $email)) { echo " Неверно введен е-mail. Введите e-mail в виде <i>softtime@softtime.ru</i> "; } else { //далее проверяем длину пароля, пароль не должен быть менее 3 и не более 16 символов if(strlen($passwd)<3) { echo "Длина пароля должна быть не менее 3-х символов !"; } else { if(strlen($passwd)>16) { echo "Длина пароля должна быть не более 16-х символов !"; } else { //если всё верно производим преобразование спецсимволов в их HTML эквиваленты. $login = htmlspecialchars(stripslashes($login)); $email = htmlspecialchars(stripslashes($email)); //затем подключаемся к нащей базе $hostname = "localhost"; $database = "phpless7"; $username = "phpless7"; $password = "ouehbKAP "; $test = mysql_pconnect($hostname, $username, $password) or die("не могу подключиться к базе"); mysql_select_db($database) or die ("Немогу выбрать базу ");// выбираем базу //проверяем существует ли такой логин и email в нащей базе $result = mysql_query("SELECT true FROM users WHERE login = '".$login."' OR email='".$email."'"); if(@mysql_num_rows($result)>0 ) { //если да то извеняемся echo "Извините такой логин уже есть "; echo "<a href=index.php>На главную страницу</a>"; } else{ //иначе вводим его(её) данные в базу $query=mysql_query("INSERT into users (id, login, passwd, email, ip, status, date) values ('', '".$login."', '".md5($passwd)."', '".$email."','".$ip."', '','".$date."')"); echo "Поздравляю Вы зарегестрировались! "; echo "<a href=index.php>На главную страницу</a>"; /*Начинаем процесс составления ХЕШ-подписи, для подтверждения личности *пользователя при активации **/ //Получаем логин пользователя в EMAIL-сети $email_cnx=explode("@",$email); //Формируем подпись $checkSum=base64_encode(substr($login,0,3).$email_cnx[0]. md5($_SERVER['REMOTE_ADDR'])); //Получаем временную метку $date=time(); //Добавляем данные во временную таблицу $q=@mysql_query("INSERT into `validate_temp` VALUES('','".$email."','". $checkSum."','".$date."')",$database); if(@mysql_error($database)!='') { die("Ошибка в запросе к БД !"); } //Сообщение зарегистрированному пользователю $message="Сегодня в ".date("d.m.Y",$date)."на сайте ShockStudio.COM был зарегистрирован пользователь с вашим email'ом. Поэтому вы получили данное письмо. Если вы не регистрировались на нашем сайте, то попросту удалите данное письмо, а если же это были вы то перейдите по нижеприведённой ссылке. Аккаунт будет действителен до ".date("d.m.Y",mktime(0,0,0,date("d",$date)+4,date("m",$date),date("Y",$date))).", после чего аккаунт зарегистрировать будет невозможно ! Ссылка для активации:<a href="activate.php?checkSum=".$checkSum."&email=".$email."">Перейти</a>; ----------------------------- С уважением администрация ShockStudio.COM Email для контактов:<a href="mailto: Ik1990@list.ru"> Ik1990@list.ru </a>"; //Посылаем сообщение пользователю @mail($email,"Активация аккаунта",$message,"Content-Type: text/html; charset=windows-1251","From: robot@shockstudio.com"); } mysql_close(); } } } } } }} } ?> </body> </html>
_____________