2013-12-17 2 views
-2

Здравствуйте, я попытался найти ответ на свой вопрос в Google, но я не мог ... Я имею в виду, что есть ответы, которые я могу, и я не могу делать то, что я хочу сделать ...удалять элемент из базы данных через 30 минут

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

Есть ли простой способ сделать это?

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

ответ

6

Как заявил Barmar в their answer here:

DELETE FROM my_table 
WHERE timestamp < NOW() - INTERVAL 30 MINUTE 

Написать PHP скрипт, который выполняет этот SQL, и добавить запись кронтаб, который запускает его каждые 30 минут. Или используйте планировщик событий MySQL для периодического запуска ; описано here.

+1

Вы можете выполнить этот запрос непосредственно перед тем, как пользователь увидит счетчик онлайн-пользователей. – Lan

+3

Просто остерегайтесь изменений дневного света, изменение вперед на один час мгновенно уничтожит все ваши сеансы. –

+0

@sergio Если вы запускаете его каждые 30 минут, некоторые сеансы могут занимать до 1 часа (в случае, если запись выполняется сразу после удаления). И в лучшем случае (запись производится непосредственно перед удалением, что так же сложно, как и наоборот), вы получите 30-минутные сеансы. В результате ваши сессии будут составлять в среднем 45 минут. – Carlos

0

Поскольку вы не упомянули какой-либо базы данных в конкретных, я дать вам общее представление о том, как осуществить это:

Вы можете иметь таблицу, как это:

USER_SESSIONS 
(
    USER_ID //UNIQUE_ID 
    LAST_ACTIVE //TIMESTAMP 
) 

Вот это функциональность, которую вы можете связать для реализации сеанса:

  1. Когда пользователь входит в систему, вы создаете запись в этой таблице.
  2. Когда пользователь выходит из системы, вы удаляете соответствующую запись из этой таблицы.
  3. Когда пользователь выполняет какое-либо действие (в зависимости от того, как вы хотите отслеживать активность в интерфейсе), обновите соответствующий TIMESTAMP пользователя.
  4. Создайте расписание БД (непрерывный процесс), который контролирует столбец TIMESTAMP. Все хорошие базы данных имеют встроенный планировщик. Вот некоторые псевдокод для планировщика:
FOR each entry in USER_SESSIONS 
If (CURRENT_TIMESTAMP - LAST_ACTIVE) > [30 mins] then 
    delete the entry of the corresponding user from this table. 
    //This will essentially cause a session timeout. 
End If 
LOOP;

Я надеюсь, что вы получили четкое представление о том, как осуществить это.

Happy Coding :)

Смежные вопросы