[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: оцените алгоритм для автом.создания страницы
redskif
допустим есть сайт, и разумеется веб2.0вседелаориентированный))

планируется что зареганый участник (Автор) может создавать разные события(обсуждение книг, кино, чего угодно). и все кто получит от него ссылку на это обсуждение (посредством e-mail, jabber, icq, sms или иным способом) могли туда зайти без всякой регистрации, прочитать чего написал автор, уже оставленные комменты и при желании оставить свой.

самое главное требование): Нужно что бы линк на автоматически генерируемую страницу (вида site.ru/news.php?fiun989jlkjlm) создавался так, что бы его невозможно было угадать-подобрать (допустим зная e-mail автора) или попасть как либо случайно просто поменяв пару символов в другой похожей действующей ссылке.
Это для того что бы Автор !вручную! всегда сам выбирал кому ее отправить на этот раз, защита от спама в комментах (т.к. посетители не зареганы и капчи не будет вообще), что бы поисковики не индексировали инфу (в .htaccess конечно будет стоять им запрет но хз)


авторизация Автора по e-mail, хранение темы сообщения и самих комментов планируется в в БД (но если будут аргументы за хранение в файлах я буду рад услышать их)

сам пока мыслю так, две таблицы. TOPIC и COMMENT

| id | avtor | id_topic | topic |
| | a@2.ru | fiun989jlkjlm |Вчера я жутко нап...|


| id | id_topic | name | comment |
| | fiun989jlkjlm | Сосед снизу | еще раз в подъезде на... |
| | fiun989jlkjlm | Оленька | а мы предохранялись? ... |

думаю просто и ничего лишнего.

а вот как генерить id_topic fiun989jlkjlm что бы его нельзя было угадать, подобрать и т.д. может быть так - news.php?a=е-маил автора&b=рандомное 6-значное выражение

при посылке запроса будет проверять есть ли такой e-mail = a в таблице TOPIC и если есть то есть ли с ним id_topic = b
если все совпадает то генерируем таблицу с темой и комментами и формой для отправки своего, если нет то 404.

много топиков от одного автора не будет (макс.50-100), старые будут автомат.удалятся так что угадать какой либо 6-значный рандомный набор у конкретного автора вероятность очень мала. что в принципе и требуется)


Спасибо прочитавшим smile.gif



Спустя 29 минут, 35 секунд (19.02.2009 - 12:11) kirik написал(а):
Предлагаю такую схему:
Таблица topics
id - medium int unsigned, auto_increment [тут собственно уникальные айдишники топиков]
author - varchar(100), index [тут е-мэил автора]
text - text [тут текст топика]

Таблица comments
id - medium int unsigned, auto_increment [уникальный айдишник коммента, например чтобы удалять]
topic_id - medium int unsigned, index [к какому посту этот коммент, индексированный столбец чтобы джоинить к топикам]
author - varchar(20) [имя автора]
text - text [текст коммента]
date_add - int unsigned [тут дата добавления коммента, чтобы по ней сортировать при выводе]

При отдаче ссылки составляем уникальный айдишник таким образом - base64_encode('idТопика:emailАвтора'); ссылка будет выглядеть как-то так:
_http://site.com/topic.php?uid=YXV0aG9yQG1haWwucnU6MTI=

При получении uid декодируем его через base64_decode, разбиваем с помощью explode на 2 части (до двоеточия и после), после чего первую часть проверяем на принадлежность к числу, вторую на валидность email адреса. Если все совпало, ищим нужный топик, находим - отдаем, нет - говорим что нет таких.

Поиск топика по числовому айдишнику в базе будет осуществляться быстрее, да и к тому же даже если пользователь расшифрует строку, то вероятность того что он подберет пару id/email практически равна 0.

Кстати если у тебя отдельная таблица с юзерами, то можно автора топика тоже сделать idшником (в таблице topics), и тогда можно кодировать строку idТопика:idАвтора:ЛевыйСлучайныйidЧтобыЗапутать. smile.gif
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.