|
|
|
| Здравствуйте. Мне нужен код который будет подбирать рандомом строку из определённого количества символов, в которой будут цифры и буквы латинского алфавита в разных регистрах, потом должна происходить запись в базу причем с условием, что такой же строки нету ни в одной другой записи. | |
|
|
|
|
|
|
|
для: Z3RO
(08.05.2011 в 21:33)
| | uniqid() | |
|
|
|
|
|
|
|
для: Z3RO
(08.05.2011 в 21:33)
| | Возможно вас заинтересует решение по ссылке http://softtime.ru/scripts/parol.php.
>потом должна происходить запись в базу причем с условием, что такой же строки нету ни в одной
>другой записи.
А чем это условие вызвано? И нельзя ли тут задействовать хэш вроде md5()? | |
|
|
|
|
|
|
|
для: cheops
(08.05.2011 в 21:53)
| | Алгоритм таков:
- Пользователь регистрируется
- Ему предоставляются данные для входа через login.php и отдельно ссылка на автологин, который происходит по ключу. Вот этот ключ мне и надо добыть. | |
|
|
|
|
|
|
|
для: Z3RO
(08.05.2011 в 22:03)
| | Вообще в таких случаях прибегают к md5(), этот алгоритм гарантировано даст вам хэш, которого нет в базе данных, если вы ему передадите уникальную строку (скажем комбинация логина, email, пароля и еще какого-нибудь ключа, против спамеров, чтобы ключ не считали автоматически). Просто если ключи будут слишком часто повторяться - операция их генерации может здорово затянуться, да и базу данных можно будет разгрузить - не нужно будет проверять есть там такой хэш или нет. | |
|
|
|
|
|
|
|
для: cheops
(08.05.2011 в 21:53)
| | > Возможно вас заинтересует решение по ссылке http://softtime.ru/scripts/parol.php
Да. То, что нужно, но надо еще както доделать вторую часть кода(запись в базу, точней проверка на существование данного ключа в базе). | |
|
|
|
|
|
|
|
для: Z3RO
(08.05.2011 в 22:05)
| | Спасибо за код. Всё работает. Осуществил так:
for($i = 1; $i <= 100; $i++)
{
$n = rand(5, 8);
$key = key_generation($n);
$check = mysql_num_rows(mysql_query("SELECT * FROM `users` WHERE `key` = '$key'"));
if(!$check)
$i = 101;
} | |
|
|
|
|
|
|
|
для: Z3RO
(08.05.2011 в 23:02)
| | а если 200 раз совпадёт?) вы не правильно мыслите.. такие штуки предвидеть тоже нужно, потому что так как и в жизни, бывает всё..
мне кажется первый вариант с использованием md5() вам более подойдёт, там даже не нужно будет делать проверку в базе | |
|
|
|
|
|
|
|
для: sl1p
(08.05.2011 в 23:06)
| | Нет. Для моих целей мд5 не подойдет. Пароль итак кодируется в мд5. Но пароль используется только для входа по логину и паролю, а ключ нужен для входа по ссылке. | |
|
|
|
|
|
|
|
для: Z3RO
(08.05.2011 в 23:22)
| | Не очень понятно, почему нельзя. md5() можно скармливать такую уникальную строку на основании информации о пользователе и его пароле, которую бы никто не мог знать (в том числе, кстати и md5-хэш пароля). | |
|
|
|
|
|
|
|
для: cheops
(08.05.2011 в 23:27)
| | Как вы себе представляете логин по ссылке к примеру http://site.ru/login.php?key=4a7d1ed414474e4033ac29ccb8653d9b это не очень удобный вариант. | |
|
|
|
|
|
|
|
для: Z3RO
(08.05.2011 в 23:34)
| | А вы хотите пускать по GET-параметру? Это не очень хорошая идея. Обычно такие штуки делают высоконагруженные сервисы и вовсе не для удобства пользователей, а для своего удобства. Т.е. логин и пароль все-равно вводить нужно, но все личные кабинеты имеют свои хэши (плевать какие, лишь бы разные). Это позволяет пользователей разбросать по разным серверам. Вы когда обращаетесь через такую ссылку, хаб-сервер смотрит, что это за ссылка, быстро ищет при помощи хэша нужный сервер и перебрасывает вас туда. Однако, пользователь по режнему вводит пароль и логин, для аутентификации, хэш его данных может быть сохранен в cookie для последующего входа. Но GET-параметр сам по себе для входа не служит, от этой практики лет 20 назад отказались - слишком компьютеры мощные, слишком людей много, слишком ненадежно.
Если вам это нужно для тех же целей, что и социальным сетям - разбросать пользователей по разным машинам - заставьте пользователей самих вводить этот хэш, и проверяйте нет ли такого в базе данных. | |
|
|
|
|
|
|
|
для: cheops
(08.05.2011 в 23:54)
| | Нет, у меня другая система: один раз авторизовался и забыл о существувании пароля и логина пока не разлогинишся. | |
|
|
|
|
|
|
|
для: Z3RO
(09.05.2011 в 00:02)
| | Хм... тогда не понятно, зачем потребовался такой ключ. Или вам нужна единичная ссылка, которую вы высылаете письмом - тогда там ключ необязательно уникальный иметь (так как в ссылку можно включить идентификатор пользователя - он всегда будет уникальный, а хэш пусть повторяется, тем более, если он не долго жить будет)? | |
|
|
|
|
|
|
|
для: cheops
(09.05.2011 в 00:37)
| | Попытаюсь обьяснить алгоритм:
Пользователь регистрируется, ему выдаётся логин, пароль и ключ. Если ему нужно авторизоватся, то он может использовать либо пароль с логином на форме для входа, либо ссылку с ключом для автологина. | |
|
|
|
|
|
|
|
для: Z3RO
(09.05.2011 в 11:50)
| | >либо ссылку с ключом для автологина.
Такие ссылки могут утекать, оставаться в кэше браузера (в том числе и на публичных машинах), после публикации подхватываться поисковыми роботами, кроме того, если их сделать достаточно короткими и легко-запоминаемыми (как я понял, длинный md5-хэш именно поэтому критерию не подходит), то их можно будет и перебором попытаться найти.
Я, конечно, не настаиваю - вам виднее, как лучше поступить, но это довольно-таки опасная штука. | |
|
|
|
|
|
|
|
для: sl1p
(08.05.2011 в 23:06)
| | > а если 200 раз совпадёт?
Код устроен так, что выбьет ошибку таймаута и попросит пройти регистрацию заново. | |
|
|
|