Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Случайное буквенно циферное значение
 
 автор: Z3RO   (08.05.2011 в 21:33)   письмо автору
 
 

Здравствуйте. Мне нужен код который будет подбирать рандомом строку из определённого количества символов, в которой будут цифры и буквы латинского алфавита в разных регистрах, потом должна происходить запись в базу причем с условием, что такой же строки нету ни в одной другой записи.

  Ответить  
 
 автор: sl1p   (08.05.2011 в 21:41)   письмо автору
 
   для: Z3RO   (08.05.2011 в 21:33)
 

uniqid()

  Ответить  
 
 автор: cheops   (08.05.2011 в 21:53)   письмо автору
 
   для: Z3RO   (08.05.2011 в 21:33)
 

Возможно вас заинтересует решение по ссылке http://softtime.ru/scripts/parol.php.

>потом должна происходить запись в базу причем с условием, что такой же строки нету ни в одной
>другой записи.
А чем это условие вызвано? И нельзя ли тут задействовать хэш вроде md5()?

  Ответить  
 
 автор: Z3RO   (08.05.2011 в 22:03)   письмо автору
 
   для: cheops   (08.05.2011 в 21:53)
 

Алгоритм таков:
- Пользователь регистрируется
- Ему предоставляются данные для входа через login.php и отдельно ссылка на автологин, который происходит по ключу. Вот этот ключ мне и надо добыть.

  Ответить  
 
 автор: cheops   (08.05.2011 в 23:12)   письмо автору
 
   для: Z3RO   (08.05.2011 в 22:03)
 

Вообще в таких случаях прибегают к md5(), этот алгоритм гарантировано даст вам хэш, которого нет в базе данных, если вы ему передадите уникальную строку (скажем комбинация логина, email, пароля и еще какого-нибудь ключа, против спамеров, чтобы ключ не считали автоматически). Просто если ключи будут слишком часто повторяться - операция их генерации может здорово затянуться, да и базу данных можно будет разгрузить - не нужно будет проверять есть там такой хэш или нет.

  Ответить  
 
 автор: Z3RO   (08.05.2011 в 22:05)   письмо автору
 
   для: cheops   (08.05.2011 в 21:53)
 

> Возможно вас заинтересует решение по ссылке http://softtime.ru/scripts/parol.php
Да. То, что нужно, но надо еще както доделать вторую часть кода(запись в базу, точней проверка на существование данного ключа в базе).

  Ответить  
 
 автор: Z3RO   (08.05.2011 в 23:02)   письмо автору
 
   для: 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;
}

  Ответить  
 
 автор: sl1p   (08.05.2011 в 23:06)   письмо автору
 
   для: Z3RO   (08.05.2011 в 23:02)
 

а если 200 раз совпадёт?) вы не правильно мыслите.. такие штуки предвидеть тоже нужно, потому что так как и в жизни, бывает всё..

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

  Ответить  
 
 автор: Z3RO   (08.05.2011 в 23:22)   письмо автору
 
   для: sl1p   (08.05.2011 в 23:06)
 

Нет. Для моих целей мд5 не подойдет. Пароль итак кодируется в мд5. Но пароль используется только для входа по логину и паролю, а ключ нужен для входа по ссылке.

  Ответить  
 
 автор: cheops   (08.05.2011 в 23:27)   письмо автору
 
   для: Z3RO   (08.05.2011 в 23:22)
 

Не очень понятно, почему нельзя. md5() можно скармливать такую уникальную строку на основании информации о пользователе и его пароле, которую бы никто не мог знать (в том числе, кстати и md5-хэш пароля).

  Ответить  
 
 автор: Z3RO   (08.05.2011 в 23:34)   письмо автору
 
   для: cheops   (08.05.2011 в 23:27)
 

Как вы себе представляете логин по ссылке к примеру http://site.ru/login.php?key=4a7d1ed414474e4033ac29ccb8653d9b это не очень удобный вариант.

  Ответить  
 
 автор: cheops   (08.05.2011 в 23:54)   письмо автору
 
   для: Z3RO   (08.05.2011 в 23:34)
 

А вы хотите пускать по GET-параметру? Это не очень хорошая идея. Обычно такие штуки делают высоконагруженные сервисы и вовсе не для удобства пользователей, а для своего удобства. Т.е. логин и пароль все-равно вводить нужно, но все личные кабинеты имеют свои хэши (плевать какие, лишь бы разные). Это позволяет пользователей разбросать по разным серверам. Вы когда обращаетесь через такую ссылку, хаб-сервер смотрит, что это за ссылка, быстро ищет при помощи хэша нужный сервер и перебрасывает вас туда. Однако, пользователь по режнему вводит пароль и логин, для аутентификации, хэш его данных может быть сохранен в cookie для последующего входа. Но GET-параметр сам по себе для входа не служит, от этой практики лет 20 назад отказались - слишком компьютеры мощные, слишком людей много, слишком ненадежно.

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

  Ответить  
 
 автор: Z3RO   (09.05.2011 в 00:02)   письмо автору
 
   для: cheops   (08.05.2011 в 23:54)
 

Нет, у меня другая система: один раз авторизовался и забыл о существувании пароля и логина пока не разлогинишся.

  Ответить  
 
 автор: cheops   (09.05.2011 в 00:37)   письмо автору
 
   для: Z3RO   (09.05.2011 в 00:02)
 

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

  Ответить  
 
 автор: Z3RO   (09.05.2011 в 11:50)   письмо автору
 
   для: cheops   (09.05.2011 в 00:37)
 

Попытаюсь обьяснить алгоритм:
Пользователь регистрируется, ему выдаётся логин, пароль и ключ. Если ему нужно авторизоватся, то он может использовать либо пароль с логином на форме для входа, либо ссылку с ключом для автологина.

  Ответить  
 
 автор: cheops   (09.05.2011 в 12:25)   письмо автору
 
   для: Z3RO   (09.05.2011 в 11:50)
 

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

Я, конечно, не настаиваю - вам виднее, как лучше поступить, но это довольно-таки опасная штука.

  Ответить  
 
 автор: Z3RO   (08.05.2011 в 23:25)   письмо автору
 
   для: sl1p   (08.05.2011 в 23:06)
 

> а если 200 раз совпадёт?
Код устроен так, что выбьет ошибку таймаута и попросит пройти регистрацию заново.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования