Новости
Документация
Download
Webboard
Поиск
FAQ/ЧаВо
Обратная связь




MySQL.RU - Webboard



Вернуться
регистрация пользователя (edart) 10/02/2006 - 11:42:08
      Re: регистрация пользователя (DNick) 10/02/2006 - 14:08:44
      Re: регистрация пользователя (edart) 10/02/2006 - 18:31:23
      Re: регистрация пользователя (edart) 10/02/2006 - 19:10:24
      Re: регистрация пользователя (DNick) 14/02/2006 - 19:04:45
      Re: регистрация пользователя (edart) 14/02/2006 - 19:35:47
      Re: регистрация пользователя (DNick) 14/02/2006 - 21:58:28
      Re: регистрация пользователя (edart) 17/02/2006 - 09:33:58
      Re: регистрация пользователя (DNick) 18/02/2006 - 11:35:23
      Re: регистрация пользователя (DNick) 18/02/2006 - 11:55:09
      Re: регистрация пользователя (edart) 20/02/2006 - 18:48:56

> Original message text:
> From: edart - 10/02/2006 - 11:42:08
> Subject:регистрация пользователя
> -----------------
> При регистрации пользователя через веб-форму посредством рнр-скрипта я делаю так:
> 1. получаю последний имеющий в таблице uid
> select max(uid) from users
> 2. Увеличиваю его на 1
> $new_uid = 'результат запроса' + 1
> 3. Регистрирую пользователя, т.е.
> insert into users set uid=$new_uid и блаблабла
>
> Разрабатывая скрипт на рнр для регистрации на фтп, понял, что вполне возможна ситуация одновременного получения одного и того же uid сразу несколькими пользователями. Что может привести к созданию одинакового uid'а. А это не есть хорошо.
>
> В приниципе сам uid уникален только внутри группы, т.е. uid+gid само по себе значение уникальное, хотя я не отслеживаю уникальность этой пары средствами сервера бд. Ключевое поле у меня userid фактически логин пользователя на доступ по фтп (использую proftpd with mysql на freebsd)
>
> Вероятно можно использовать auto_increment по полю uid. Но оно должно быть ключевое.
>
> Можно ли решить проблему без использования auto_increment. Например включением блокировки, однако не знаю как это правильно делать
>


From: edart - 10/02/2006 - 19:10:24
Subject:регистрация пользователя
-----------------
в продолжение темы

все-таки думаю стоит описать всю задачу. Т.е. что надо.

1. Некто скажем админ, вносит в таблицу ФИО и некоторое кодовое слово, которое известно каждому конкрентному будущему пользователю
2. Конкретный будущий пользователь, используя специальный регистрационный сайт (или страничку) регистрируется. для чего вводит:
а) фио
б) кодовое слово
с) логин, пароль и подтверждение
3. рнр скрипт принимающий данные формы проверяет
а) допустимый ли это пользователь
б) это не повторная регистрация
с) не зарегисрирован ли пользователь с таким логином
д) корректно ли написан логин и пароль
4. после успешной проверки всех данных идет запись в необходимые таблицы
а) получаем последний uid
б) создаем запись для даного пользователя с увеличенным на 1 uid
в) регистрируем пользователя в mysql
г) создаем каталог по логину, и назначаем права владения
д) создаем пустую бд
е) выдаем успешное сообщение

Возможные проблемы: правад может надуманные?
1. два и более регистрируемых вводят одинаковые логины. Но некто первый раньше получил информацию об отсутсвии такого логина. Его скрипт завершается успешно. А для другого пользователя возникает ошибка вставки (поскольку логин - уникальное значение)
Решение - в приниципе тут можно особо не заморачиваться, а обработать ошибку исполнения второго пользователя и посоветовать ему ввести новый логин

2. два или более пользователей обращаются к таблице чтобы получить последний uid и одновременно получают его. Первый пользователь увеличив uid на 1 успешно вставляет. Второй тоже делает это успешно. Получаем одинаковый uid.

Решение - сделать uid уникальным - но не хотелось бы (уникальна пара uid и gid (номер группы)). И решать так же как в первом случае вернее запустить запрос на последний uid повторно, в случае ошибки вставки
Другим решение может быть назначение автоинкремента, но рано или поздно может возникнуть проблема, хотя возможно тоже надуманная
Третьим решением могло бы быть использование блокировки, до чтения последнего уида и снятие блокировки после успешной вставки.
Тогда для второго пользователя надо предусмотреть постановку его в очередь, возможно с помощью тайм_аута и повтора обращения определенное количесвто раз, с последующей выдачей рекомендации - типа Попробуйте еще раз.

Есть еще решение - при формирование списка допустимых пользователей на регистрацию сразу вручную определять им uid и дело с концом. Но такое решение мне не видится изящным


[Это сообщение - спам!]

Последние сообщения из форума

Уважаемые посетители форума MySQL.RU!
Убедительная просьба, прежде чем задавать свой вопрос в этом форуме, обратите внимание на разделы:
- ответы на наиболее часто задаваемые вопросы - FAQ
- раздел документация
- раздел поиск по сообщениям форума и документации
Также, старайтесь наиболее подробно указывать свою ситуацию (версию операционной системы, версию MySQL, версию программного обеспечения, по которому возникает вопрос, текст возникающих ошибок, и др.)
Помните, чем конкретнее Вы опишете ситуацию, тем больше шансов получить реальную помощь.
 Имя:
 E-mail:
 Тема:
 Текст:
Код подтверждения отправки: Code
26601



РЕКЛАМА НА САЙТЕ
  Создание сайтов | |