2015-11-22 3 views
2

Я запускаю сайт wordpress на vps. На моем сайте слишком много пользователей, использующих loginpress, поэтому каждые пару дней форма входа в систему перестает работать и постоянно и снова перенаправляет пользователя в форму входа (а не на панель инструментов). После расследования и попытки выяснить, что происходит, я вошел в phpmyadmin и узнал, что поле session_tokens в «wp_usermeta» раздувается (т. Е. Слишком много соединений/незадействованных соединений). Я просто очистил все ценности, и все приступило к работе.Wordpress Bloated «session_token» в базе данных MySQL

Теперь я ищу способ очистить это поле от mysql db каждые 12 часов. Я искал ссылку на код Wordpress ( https://developer.wordpress.org/reference/classes/wp_session_tokens/destroy_all_for_all_users/) и нашел функцию, которая уничтожает все токены сеанса для всех пользователей.

final public static function destroy_all_for_all_users() { 
    $manager = apply_filters('session_token_manager', 'WP_User_Meta_Session_Tokens'); 
    call_user_func(array($manager, 'drop_sessions')); 
} 

Если есть способ создать простую PHP-файл, который я мог бы работать каждый раз, чтобы очистить это будет большим (я могу затем создать хроны), но я не уверен, если это возможно, или как это можно сделать. Любая помощь приветствуется.

Спасибо.

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

+0

Создание триггера в db будет одним из решений или событием, установленным для удаления записей каждые 12 часов. – RamRaider

+0

@RamRaider. Как я могу это сделать? Я иногда использую delete FROM 'wp_usermeta', где meta_key = 'session_tokens' в консоли phpmyadmin, чтобы очистить значения, но как я могу создать событие для его выполнения каждые 12 часов? – user2334436

ответ

0

непроверенной событие как демонстрация:

create event `evtDeleteSessionTokens` 
    on schedule 
     every 12 hour 
    on completion preserve 
    enable 
    comment 'delete stale tokens every x hours' 
    do begin 
     delete from wp_usermeta where meta_key = 'session_tokens'; 
end 
0

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

https://codex.wordpress.org/Function_Reference/wp_schedule_event

Синтаксис функции:

<?php wp_schedule_event(time(), 'hourly', 'my_schedule_hook', $args); ?> 

метод вам нужно позвонить, чтобы очистить данные сессии:

WP_Session_Tokens::destroy_all_for_all_users(); 

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

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