Remove Expired Login Sessions From the Database
Once a day, removes expired login sessions that WordPress keeps in user meta until the user logs in again, which on membership sites and shops adds up to a lot of dead data.
Opens WPIDE on
Code
add_action( 'init', function () {
if ( ! wp_next_scheduled( 'wpide_purge_sessions' ) ) {
wp_schedule_event( time() + HOUR_IN_SECONDS, 'daily', 'wpide_purge_sessions' );
}
} );
add_action( 'wpide_purge_sessions', function () {
global $wpdb;
$rows = $wpdb->get_results( "SELECT user_id, meta_value FROM {$wpdb->usermeta} WHERE meta_key = 'session_tokens' LIMIT 500" );
foreach ( $rows as $row ) {
$sessions = maybe_unserialize( $row->meta_value );
if ( ! is_array( $sessions ) ) {
continue;
}
$active = array_filter( $sessions, function ( $session ) {
return isset( $session['expiration'] ) && $session['expiration'] >= time();
} );
if ( count( $active ) === count( $sessions ) ) {
continue;
}
if ( $active ) {
update_user_meta( (int) $row->user_id, 'session_tokens', $active );
} else {
delete_user_meta( (int) $row->user_id, 'session_tokens' );
}
}
} );
Notes
Processes up to 500 users per run; active sessions are never touched.
How to add this snippet
- Install WPIDE on your WordPress site (it is free) and open Code Snippets.
- Use snippet above adds it from the library in one click. Or copy the code into a new snippet with the same code type.
- It is added inactive: review the code and settings, then switch it on.