PHP куки, сессии, MySQL - PullRequest
0 голосов
/ 12 января 2010

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

Код проверки подлинности проверяет наличие файла cookie и сеанса и, если он не существует, создает ограниченную учетную запись пользователя и устанавливает файл cookie следующим образом:

$session = md5(time() . "sitename" . $_SERVER['REMOTE_ADDR']); setcookie("sitename",$session, time()+ 14 * 24 * 3600, "/",".sitename.com"); mysql_query("INSERT user(session,permissions) VALUES ($session, $permissions)"); $this->ActiveUser = mysql_insert_id();

На сервере есть задание cron, настроенное для ночного запуска, которое очищает эти сеансы и сбрасывает значение auto_increment до последнего зарегистрированного идентификатора пользователя + 1. Несмотря на то, что скрипт очистки хорош, кажется, игнорирует явный недостаток дизайна что поток трафика (уникальные пользователи) может заставить значение INT для идентификатора пользователя достичь своего максимального значения mysql: 2147483647. Обновление идентификатора пользователя до большого int поможет, но только (теоретически) так долго. Кроме того, если, скажем, между последним зарегистрированным пользователем и первым новым зарегистрированным идентификатором пользователя того дня, когда промежуточные значения auto_increment между ними никогда не будут повторно использоваться, будет 50 посетителей.

На сайте есть хорошие показатели отчетности как для посетителей, так и для участников, которые предоставляют показатели того, какие элементы просматривал пользователь, попал ли он в их корзину для покупок и купил ли он этот элемент, зарегистрировав аккаунт.

Я думаю, что функцию аутентификации можно изменить с помощью переменных SESSION для посетителей и корзины покупок, не затрагивая базу данных и не создавая неиспользуемые значения auto_increment. Недостатком является то, что они потеряют пользовательские отчеты.

Очевидно, что это компромисс, но я решил опубликовать его здесь и посмотреть, какие были мысли. Спасибо!

1 Ответ

3 голосов
/ 12 января 2010

Вы представляете, сколько запросов составляет 2 миллиарда? Посчитайте 10 уникальных посетителей в секунду, 24 часа в сутки, и посмотрите, сколько лет потребуется, чтобы добраться туда.

Я уже много лет пользуюсь очень популярными сайтами, и они никогда даже близко не переполняли свой первичный ключ int4.

Мое мнение, это не проблема.

...