Альтернативный способ проверить, вошел ли пользователь в систему или нет

Я использовал mysql, чтобы проверить, вошел ли пользователь в систему или нет, но я получил электронное письмо от моей хостинговой компании, в котором говорилось, что я превысил лимит запросов mysql, а стоимость обновления лимита запросов mysql до 150000 в час составила 240 долларов в год. .

Теперь мне нужен альтернативный способ проверить, вошел ли пользователь в систему или нет, например, записать временную метку пользователя в файл, но я не знаю, как это сделать лучше всего ... И я даже не знаю, какие теги Ставлю на этот пост ...

Итак, не могли бы вы помочь мне с этой проблемой?


person Sergio Toledo Piza    schedule 26.10.2012    source источник


Ответы (3)


Довольно странно, что ваш хост имеет ограничение на количество запросов mysql, но вернемся к вашему вопросу;

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

Однако если мы сделаем предположение, что вы хотите сделать это вне базы данных, вы можете сгенерировать конечный результат HTML, когда пользователь входит в систему или выходит из нее. Сохраняйте таблицу в базе данных со статусом пользователей, но всякий раз, когда пользователь входит в систему или выходит из нее, сделайте ОДИН запрос к этой таблице и сгенерируйте, скажем, ваш HTML-список зарегистрированных пользователей. Сохраните вывод в файл, и когда вам нужно отобразить страницу, включите этот файл вместо вызова базы данных.

Он не удаляет полностью базу данных MySQL, но достаточно надежен и должен значительно сократить количество запросов к базе данных.

person Daniel M.    schedule 26.10.2012

Используйте 1_. Он в 1000 раз эффективнее и предназначен именно для этой цели. Прочтите об этом здесь

person Paul Dessert    schedule 26.10.2012
comment
Да, на мой взгляд, писать свой собственный код для этого - это немного излишне. Когда пользователь входит в систему, задайте его имя пользователя в $_SESSION суперглобале, и каждая страница просто запускает сеанс и проверяет, установлено ли имя пользователя. Если нет, перенаправьте на страницу входа. - person thatidiotguy; 26.10.2012
comment
Когда он использует более 150 тысяч запросов в час, я предполагаю, что $ _SESSION его не устроит. - person Ron; 26.10.2012
comment
@SergioToledoPiza - Нет проблем. - person Paul Dessert; 26.10.2012
comment
Это зависит от того, что вы делаете во время сеанса. Большое количество операций ввода-вывода, возможно, интенсивное выполнение операций ввода-вывода, если сеанс используется для хранения большего количества данных, чем идентификатор пользователя. Тогда вы должны посмотреть, как php выполняет сборку мусора во время сеансов. - person Ron; 26.10.2012
comment
@Ron - Верно, но в данном случае я думаю, что вопрос только в том, что это правда или ложь. - person Paul Dessert; 26.10.2012
comment
oooh Ответ Дэниела напомнил мне, что я не могу использовать сеансы, потому что я не хочу, чтобы только пользователь знал, вошел ли он в систему локально, но мне нужно, чтобы другие пользователи знали, вошел ли пользователь в систему, поэтому я думаю, что сеансы не сработает ...: // - person Sergio Toledo Piza; 26.10.2012
comment
@relentless: в зависимости от соотношения уникальных посетителей и кликов. Если у вас есть 150 тыс. Сессий для хранения в час, я думаю, что скоро у него возникнут проблемы. - person Ron; 26.10.2012
comment
@Sergio Toledo Piza: Это проблема, вы можете решить ее по-другому. Подумайте о сохранении отметки времени последнего посещения в наборе данных пользователей. Но основная проблема остается. - person Ron; 26.10.2012

Обновите (или понизьте с точки зрения затрат) до корневого сервера и / или используйте более совершенные механизмы для хранения сеансов. т.е. memcache, couchdb или mongodb.

В любом случае вам придется обрабатывать семафоры вручную, если вы оставите обработчик сеанса PHP.

person Ron    schedule 26.10.2012
comment
Я хотел бы иметь свой собственный хост, но IP-адрес моего компьютера меняется каждый раз, и я не могу ничего разместить на своем ПК ... - person Sergio Toledo Piza; 26.10.2012
comment
Здесь (в Германии) я получаю полный корневой сервер за 49 € / мес. Это ~ 65 $ / мес. - person Ron; 26.10.2012
comment
но мне всего 14 и я не могу позволить себе платить 65 $ / мес. - person Sergio Toledo Piza; 26.10.2012
comment
Что ты там делаешь, если получаешь 150 тысяч показов в час? :) - person Ron; 26.10.2012
comment
Я обновляю только логин пользователя в mysql (mysql_query("UPDATE users SET loginstamp='".time()."' WHERE id='$user_id'");) каждые 30 секунд ... - person Sergio Toledo Piza; 26.10.2012
comment
2 Проблемы: SQL-Injection -ffective и mysql_query (который устарел и больше не поддерживается) - person Ron; 26.10.2012
comment
ну, mysql_query все еще работает со мной, поэтому я не думаю, что мне действительно нужно менять do mysqli_query, и почему это влияет на SQL-инъекции? - person Sergio Toledo Piza; 26.10.2012
comment
Sql-запросы, подобные вашему, сильно зависят от дисциплины и легко уязвимы для человеческой невнимательности. Вы можете использовать подготовленные операторы с PDO или другими технологиями. Они позволят вам писать гораздо более безопасный (и более производительный) код. stackoverflow.com/questions/732561/ - stackoverflow.com/questions/60174/ - person Ron; 27.10.2012