Opens in a new tab
  1. Home
  2. Guides
  3. Access
Access guide

How to Force Logout a WordPress User Immediately

Learn how to force logout a WordPress user immediately using WordPress session tokens, invalidate one or all active sessions, secure administrative logout actions and prevent suspended or compromised accounts from simply logging back in.

  • Updated September 17, 2026
  • 24 min read
  • WordPress guide

How to force logout a WordPress user immediately is an important question when an account may be compromised, an employee or contractor loses access, permissions change, or an administrator simply needs to terminate an active session without waiting for it to expire naturally.

Changing a user’s role, removing a capability or even changing some account details does not necessarily mean every existing authenticated session disappears at that exact moment.

If immediate removal matters, the objective is different:

User is currently logged in
↓
Administrator invalidates active session
↓
Existing authentication session becomes unusable
↓
User's next authenticated request fails
↓
WordPress requires authentication again

WordPress already includes a session-token system that makes this possible. You do not need to delete the user, manipulate browser cookies remotely or invent a second authentication layer.

This guide explains how WordPress login sessions work, how to destroy one or all sessions for a user, how to force logout programmatically, what happens to other devices, how password and permission changes relate to sessions, how to handle compromised accounts and how TheOneWP can simplify administrative access control.

For the wider authentication picture, start with WordPress Login Security Layers, Explained.

What does forcing a WordPress logout actually mean?

When a user signs in to WordPress, the server does not keep the browser connected through one permanent live connection.

Instead, WordPress authenticates subsequent requests using authentication cookies associated with a valid session.

Conceptually:

Login credentials accepted
↓
WordPress creates authentication session
↓
Authentication cookies are issued
↓
Browser sends cookies on later requests
↓
WordPress validates session
↓
User remains authenticated

Forcing a logout means invalidating the server-side authentication state that makes those cookies useful.

The browser may still physically contain an old cookie for a short period, but if the corresponding session token has been destroyed, WordPress no longer accepts it as a valid authenticated session.

Why would you force logout a WordPress user?

There are several legitimate administrative and security reasons.

Common examples include:

  • a password may have been compromised;
  • a laptop or phone was lost;
  • an employee has left the organization;
  • a contractor’s work has finished;
  • a client account should no longer have access;
  • an administrator changed a user’s permissions;
  • an unfamiliar login was detected;
  • an account appears to be active from an unexpected device;
  • a temporary access period has ended;
  • the site is undergoing a security response;
  • all sessions should be reset after an account change.

If suspicious authentication activity is the reason, How to Monitor WordPress Login Attempts provides useful context for identifying unusual activity rather than reacting only after an account has already been accessed.

Logging out yourself vs. logging out another user

WordPress provides different mechanisms depending on whose session you want to terminate.

For the current user, WordPress can destroy the current authentication session as part of the normal logout process.

For another user’s active sessions, you normally work with WordPress session tokens.

This distinction matters because:

Normal logout
→ Ends the current authenticated session

Session-token management
→ Can invalidate another user's sessions

How WordPress authentication sessions work

WordPress uses authentication cookies together with server-side session information to identify logged-in users across requests.

The important point is that a valid browser cookie participates in an authentication process that WordPress can verify against the corresponding session.

If the server-side session is invalidated, keeping the old cookie in the browser does not preserve authenticated access.

If you are building or modifying login behavior, WordPress Login Hooks Explained is useful for understanding where custom authentication logic can interact with the normal login lifecycle.

WordPress session tokens

WordPress includes session tokens that allow individual login sessions to be tracked and invalidated.

This means one account can have several authenticated sessions at the same time.

For example:

User: Editor A

Session 1
Desktop browser

Session 2
Laptop browser

Session 3
Mobile browser

Those sessions can be invalidated independently or collectively.

The WP_Session_Tokens class

WordPress exposes session management through the WP_Session_Tokens class.

You can obtain the session manager for a user with:

$sessions = WP_Session_Tokens::get_instance(
    $user_id
);

Once you have the manager, you can inspect or destroy that user’s sessions.

How to force logout a WordPress user from all devices

To invalidate all sessions belonging to a user, retrieve the user’s session-token manager and call destroy_all().

$user_id = 123;

$sessions = WP_Session_Tokens::get_instance(
    $user_id
);

$sessions->destroy_all();

This is the core operation for forcing a WordPress user out of all currently authenticated sessions.

The effect is conceptually:

Desktop session ─┐
Laptop session  ─┼─→ Invalidated
Mobile session  ─┘

The official WP_Session_Tokens::destroy_all() documentation describes this method specifically as destroying all sessions for a user.

What happens after destroy_all()?

Suppose the user currently has WordPress open in three browsers.

You run:

$sessions->destroy_all();

WordPress invalidates the server-side session tokens associated with that account.

The open browser tabs do not necessarily disappear or instantly transform into login screens.

Instead, when those browsers make subsequent requests requiring authentication, their previous session credentials are no longer valid.

WordPress then requires the user to authenticate again.

Does force logout happen instantly?

From the authentication perspective, session invalidation is immediate once the server-side session data has been destroyed.

But the visible effect depends on what the user’s browser is doing.

If someone is staring at an already-rendered editing screen without making another request, that HTML is already in the browser.

As soon as the interface attempts to:

  • load another admin page;
  • save a post;
  • make an authenticated AJAX request;
  • call an authenticated REST endpoint;
  • refresh the page;
  • perform another protected operation;

WordPress can no longer accept the destroyed session as valid.

So “immediate logout” should be understood as immediate session invalidation, not remote destruction of HTML already displayed on somebody else’s screen.

Force logout is not the same as blocking future login

This distinction is critical.

If you destroy all sessions:

Existing sessions
→ Invalidated

but the user still knows valid credentials:

Next login attempt
→ May succeed

Force logout answers:

Should existing sessions remain valid?

Blocking login answers:

Should this account be allowed to authenticate again?

These are separate controls.

When you should force logout and block login together

Consider an employee who has just left an organization.

Only destroying sessions produces:

Employee logged out
↓
Employee still has credentials
↓
Employee logs in again

That is not a complete access-removal workflow.

A safer process is:

Block future authentication
+
Destroy existing sessions
↓
Current access ends
+
New access is prevented

TheOneWP provides a dedicated Block User Login module for preventing selected accounts from authenticating without requiring the account itself to be deleted.

Why disabling login can be better than deleting the account

Deleting a WordPress user can affect content ownership and historical attribution.

An account may own:

  • posts;
  • pages;
  • custom post type entries;
  • media;
  • comments;
  • other user-associated records.

If your goal is simply:

This person must no longer access WordPress

deleting the account may be unnecessarily destructive.

Blocking authentication while preserving the user record can retain historical ownership and audit context.

Force logout after detecting suspicious access

If an account appears compromised, destroying active sessions is an important containment step.

A response might look like:

Suspicious login detected
↓
Block or restrict account
↓
Destroy all sessions
↓
Reset credentials
↓
Review account permissions
↓
Review recent activity
↓
Restore access when safe

For a broader set of login defenses, see A WordPress Login Hardening Checklist.

Changing the password and active sessions

Password changes and session invalidation are related, but you should not design an administrative security workflow around assumptions about what a particular password-change path will do to every existing session.

If your requirement is explicit:

Terminate all active sessions now

then explicitly destroy the user’s sessions.

This makes the intent of your code and administrative workflow unambiguous.

Do not rely only on changing the user’s role

Suppose a user is changed from:

Administrator
↓
Editor

WordPress capability checks should begin reflecting the new effective permissions.

But if your security requirement is:

End this person's current authenticated session

then change the permissions and invalidate the sessions.

For the underlying permission system, see WordPress User Roles and Capabilities, Explained.

Audit roles before and after access changes

When an account is being restricted because somebody changed responsibilities, review the user’s effective access rather than modifying one visible menu and assuming the job is finished.

Useful questions include:

  • Which role does the user have?
  • Were custom capabilities added?
  • Does another plugin grant additional access?
  • Does the user have access to custom post types?
  • Can the account manage other users?
  • Can it modify plugins or themes?
  • Does it retain access to sensitive custom tools?

How to Audit User Roles on a WordPress Site covers this process in more detail.

Force logout by user ID

If you already know the target user ID, the implementation is straightforward:

function company_force_logout_user(
    $user_id
) {

    $user_id = absint(
        $user_id
    );

    if ( ! $user_id ) {
        return false;
    }

    $sessions = WP_Session_Tokens::get_instance(
        $user_id
    );

    $sessions->destroy_all();

    return true;
}

You could then call:

company_force_logout_user(
    123
);

for the required account.

Force logout by username

If your administrative process begins with a username, resolve the user first.

$user = get_user_by(
    'login',
    'exampleuser'
);

if ( $user ) {

    $sessions = WP_Session_Tokens::get_instance(
        $user->ID
    );

    $sessions->destroy_all();

}

Once the account has been resolved, the session operation can use the resulting WordPress user ID.

Force logout by email address

The same approach can resolve an account using its email address:

$user = get_user_by(
    'email',
    'user@example.com'
);

if ( $user ) {

    WP_Session_Tokens::get_instance(
        $user->ID
    )->destroy_all();

}

Internally, however, your administrative action should normally operate on the stable user ID once the account has been resolved.

Always verify the administrator’s permission

If you create a custom “Force Logout” button, do not allow any authenticated user to invalidate anybody else’s sessions.

The action needs authorization.

For example:

if (
    ! current_user_can(
        'edit_users'
    )
) {
    wp_die(
        'You are not allowed to perform this action.'
    );
}

The exact capability should match the authority required by your implementation.

The official current_user_can() documentation explains how WordPress evaluates whether the current user has a specified capability.

For more complex administrative restrictions, see Restricting WordPress Features by User Role.

Protect a Force Logout action with a nonce

A privileged action that terminates another user’s sessions should also be protected against unintended cross-site requests.

For example, a URL-based administrative action might include a nonce:

$url = wp_nonce_url(
    admin_url(
        'users.php?action=force_logout&user=123'
    ),
    'force_logout_user_123'
);

The receiving handler can verify it before performing the action.

WordPress explicitly warns that nonces should not be treated as authentication or authorization. The administrative action still needs an appropriate capability check.

A secure administrative flow

A custom Force Logout operation should conceptually perform these checks:

Administrator clicks Force Logout
↓
Validate target user ID
↓
Verify nonce
↓
Verify current user's capability
↓
Prevent prohibited targets if necessary
↓
Destroy target user's sessions
↓
Return success message

Each step handles a different failure mode.

Example administrative handler

A simplified handler might look like:

function company_handle_force_logout() {

    if (
        ! current_user_can(
            'edit_users'
        )
    ) {
        wp_die(
            'Permission denied.'
        );
    }

    $user_id = isset(
        $_GET['user']
    )
        ? absint( $_GET['user'] )
        : 0;

    if ( ! $user_id ) {
        wp_die(
            'Invalid user.'
        );
    }

    check_admin_referer(
        'force_logout_user_' . $user_id
    );

    $sessions = WP_Session_Tokens::get_instance(
        $user_id
    );

    $sessions->destroy_all();

    wp_safe_redirect(
        admin_url(
            'users.php?forced_logout=1'
        )
    );

    exit;
}

The official wp_safe_redirect() reference confirms that the function performs a safe local redirect and should normally be followed by exit;.

Do not expose Force Logout through an unprotected GET parameter

This would be a poor implementation:

/wp-admin/users.php?force_logout=123

if simply visiting the URL immediately destroys the session without request verification or permission checks.

Administrative actions should not trust:

  • a user ID from the URL;
  • a hidden form field;
  • a button being invisible to lower roles;
  • JavaScript validation;
  • the assumption that only administrators know the endpoint.

The server must enforce the rules.

Force logout through AJAX

If the Users screen contains an asynchronous Force Logout button, the AJAX endpoint needs the same security model.

add_action(
    'wp_ajax_company_force_logout',
    function () {

        check_ajax_referer(
            'company_force_logout',
            'nonce'
        );

        if (
            ! current_user_can(
                'edit_users'
            )
        ) {
            wp_send_json_error(
                array(
                    'message' => 'Permission denied.'
                ),
                403
            );
        }

        $user_id = isset(
            $_POST['user_id']
        )
            ? absint( $_POST['user_id'] )
            : 0;

        if ( ! $user_id ) {
            wp_send_json_error(
                array(
                    'message' => 'Invalid user.'
                ),
                400
            );
        }

        WP_Session_Tokens::get_instance(
            $user_id
        )->destroy_all();

        wp_send_json_success(
            array(
                'message' => 'User sessions terminated.'
            )
        );

    }
);

Again, the nonce verifies the request context while the capability check determines whether the authenticated user is authorized to perform the operation.

Force logout through the REST API

A custom administration application may use the WordPress REST API instead.

The same principle applies: the endpoint must have a meaningful permission_callback.

register_rest_route(
    'company/v1',
    '/users/(?P<id>\d+)/logout',
    array(
        'methods'  => 'POST',
        'callback' => function ( $request ) {

            $user_id = absint(
                $request['id']
            );

            WP_Session_Tokens::get_instance(
                $user_id
            )->destroy_all();

            return array(
                'success' => true,
            );
        },
        'permission_callback' => function () {

            return current_user_can(
                'edit_users'
            );
        },
    )
);

Custom REST actions should follow the same principle as every other privileged WordPress endpoint: authentication alone does not imply permission to terminate another user’s sessions.

Can you destroy only one WordPress session?

Yes.

WordPress session management is not limited to:

Keep everything
or
Destroy everything

A specific session can be invalidated if you have the appropriate session token.

The session manager exposes WP_Session_Tokens::destroy() for this purpose.

When destroying one session is useful

Imagine a user reports:

Desktop office computer
→ Trusted

Personal laptop
→ Trusted

Old laptop
→ Lost

If your system can reliably identify the relevant session, you may want:

Office desktop
→ Keep

Personal laptop
→ Keep

Lost laptop
→ Destroy

instead of forcing the user out everywhere.

When destroying all sessions is safer

If you do not know which session is compromised, selective termination can create false confidence.

For example:

Suspicious activity detected
↓
Unknown device/session
↓
Destroy all sessions
↓
Require fresh authentication

For genuine account-compromise response, invalidating everything is often the clearer containment step.

Log out everywhere except the current session

WordPress also supports preserving one trusted session while invalidating the others.

The logic is:

Current trusted session
→ Keep

Every other session
→ Destroy

The WP_Session_Tokens::destroy_others() method destroys every session for the user except the session represented by the token passed to the method.

Do not confuse logout with account deletion

Destroying sessions does not delete:

  • the WordPress user;
  • the user’s posts;
  • the user’s metadata;
  • the user’s role;
  • the user’s password;
  • the user’s profile;
  • the user’s content ownership.

It only invalidates authentication sessions.

That makes forced logout a relatively focused administrative action.

Do not confuse logout with password reset

These actions solve different problems.

Force logout
→ Terminate existing authentication

Password reset
→ Change the credential used for future authentication

Block login
→ Prevent future authentication

Role change
→ Change permissions after authentication

A security incident may require several of these actions together.

A compromised-account response workflow

If you believe an account has been compromised, a more complete response can include:

1. Block or restrict the account
2. Destroy active sessions
3. Reset credentials
4. Review role and capabilities
5. Review recent login activity
6. Review content and configuration changes
7. Correct unauthorized changes
8. Restore access only when appropriate

If repeated password guessing contributed to the incident, How to Limit Login Attempts in WordPress explains how login-attempt controls can reduce brute-force exposure.

Monitor login history before an incident

Force logout is much more useful when administrators have context about account activity.

Useful information can include:

  • last login time;
  • recent failed attempts;
  • unexpected authentication patterns;
  • dormant accounts becoming active;
  • accounts that have not been used for months.

TheOneWP provides a Last Login module for making recent account usage easier to review from the administration area.

For accounts that have quietly accumulated over time, Auditing Dormant WordPress User Accounts explains why inactive accounts deserve periodic attention.

Force logout when a contractor finishes work

Temporary collaborators are a common reason for session termination.

A contractor workflow might be:

Contract begins
↓
Create appropriate WordPress account
↓
Grant minimum required permissions
↓
Work completed
↓
Block future login
↓
Destroy active sessions
↓
Retain account only if historical attribution is needed

The important part is not merely removing the person from a spreadsheet somewhere. Their actual WordPress authentication state needs to match the administrative decision.

Force logout when permissions change significantly

Not every role change requires session destruction.

WordPress evaluates capabilities dynamically in many contexts.

But if the permission change is security-sensitive, forcing fresh authentication can establish a clearer boundary between:

Previous access state
and
New access state

This is particularly relevant when removing high-level administrative privileges.

Review custom roles too

Sites frequently use custom roles rather than only the default Administrator, Editor, Author, Contributor and Subscriber roles.

A custom role may contain capabilities that are not obvious from its name.

For example:

Client Manager
├── edit_pages
├── publish_pages
├── upload_files
└── custom_plugin_access

Do not assume that changing a role label tells you everything about the user’s effective access.

Custom WordPress Roles vs. Combining Existing Ones provides more context for sites with non-standard permission structures.

Protect administrators from accidental self-lockout

If you add a Force Logout control to the Users screen, decide what should happen when an administrator targets their own account.

Possible behaviors include:

Allow
→ Administrator is logged out too

Warn
→ Require explicit confirmation

Prevent
→ Self-targeting is not allowed through this tool

There is no universal answer, but the behavior should be intentional.

Protect critical accounts

Some installations may need additional rules around sensitive accounts.

For example, a custom system might prevent lower-level user managers from terminating sessions belonging to higher-privilege administrators.

Do not base such protection only on what buttons appear in the interface.

The server-side handler must enforce the restriction.

Use confirmation for destructive session actions

Force logout is reversible in the sense that the user can authenticate again if still permitted, but it is still disruptive.

An administrative interface should normally identify the target clearly:

Force logout?

User:
Marco Rossi

Email:
marco@example.com

This will terminate all active sessions.

This reduces the chance of logging out the wrong account because two users happened to have similar display names.

Use user IDs internally

Display names can change and are not guaranteed to be unique.

Email addresses can also change.

Once an administrator has selected the account, the operation should use the WordPress user ID as the primary identifier.

Displayed identity
→ Human-friendly

User ID
→ Operation target

Record administrative force-logout events when appropriate

On sites where account administration matters operationally, it can be useful to record:

  • who initiated the logout;
  • which user was targeted;
  • when the action occurred;
  • whether all sessions were destroyed;
  • possibly the administrative reason.

For example:

2026-09-17 10:04
Administrator #1
terminated all sessions for User #123.

This can help when reconstructing access changes later.

Do not log sensitive session tokens

An audit log should record the administrative event, not secret authentication material.

Avoid storing:

  • raw session tokens;
  • authentication cookies;
  • passwords;
  • password-reset secrets;
  • other reusable credentials.

Logging more data is not automatically better logging. Sometimes it simply creates another sensitive dataset that has to be protected.

Force logout and WordPress Multisite

WordPress Multisite deserves special attention because one user account can participate in multiple sites within the same network.

A network administrator should understand whether the desired action is:

Remove access to one site
or
Terminate the user's authentication session

Those are not necessarily the same operation.

Session destruction affects authentication, while site membership and capabilities determine what the user can access after authentication.

Removing a user from one site is not necessarily a global logout

In Multisite, removing membership from one site changes that user’s relationship with the site.

If your security objective is:

This authenticated session must no longer remain active

then handle the session explicitly rather than assuming membership changes alone provide the desired logout behavior.

Force logout and persistent browser tabs

After session destruction, a user may still have an admin screen visibly open.

That does not mean they remain authorized.

Consider:

Page HTML already loaded
→ Still visible

User clicks Update
→ Authenticated request occurs

Session token invalid
→ Request cannot continue normally

This distinction is particularly important when testing force-logout functionality.

Test with real authenticated actions

Do not test only by watching whether another browser instantly redirects itself.

After invalidating the sessions, try:

  • refreshing the dashboard;
  • opening another admin page;
  • saving a post;
  • uploading media;
  • making an authenticated REST request;
  • performing an AJAX-backed action.

The test should confirm that the old authentication state is no longer accepted.

Force logout and autosave

If a user is editing content when their session is invalidated, their next autosave or save operation may fail because authentication is no longer valid.

That is an expected consequence of terminating access.

For ordinary administrative offboarding, you may therefore want to coordinate the timing when there is no immediate security threat.

For a compromised account, containment normally takes priority over preserving an unfinished editing session.

Do not delay security logout for convenience

If an account is genuinely suspected of compromise, waiting for the person to finish editing defeats the purpose of immediate session termination.

The priorities differ:

Routine access change
→ Coordinate when practical

Security incident
→ Contain access immediately

Force logout after changing sensitive account information

Some administrative workflows may intentionally invalidate sessions after changes such as:

  • security-related role changes;
  • account suspension;
  • credential recovery;
  • suspected compromise;
  • ownership transfer;
  • temporary-access expiration.

The important design principle is to make session invalidation an explicit step when the previous authenticated state should no longer be trusted.

Do not force logout on every harmless profile change

There is little value in terminating every device because somebody changed:

  • their display name;
  • a biography;
  • an interface preference;
  • a harmless profile field.

Forced logout should correspond to an authentication or access-control reason.

Login redirects are separate from session security

Changing where users go after authentication or logout does not change whether the underlying session is valid.

For example:

Logout
↓
Redirect to homepage

is a navigation decision.

TheOneWP provides Redirect After Logout for controlling the destination after a normal logout.

For login-side navigation, Redirect After Login handles where users are sent after authentication.

These should not be confused with invalidating another user’s active sessions.

Changing the login URL is also a separate layer

A custom login endpoint can reduce exposure to generic automated traffic or change how users reach authentication, but it does not invalidate a session that already exists.

For that topic, see How to Change the WordPress Login URL and Does Hiding wp-login.php Actually Help Security?.

Authentication security works in layers rather than through one setting that somehow fixes every possible problem.

Login identifiers are another independent control

Restricting whether users can authenticate with a username, email address or another allowed identifier affects the login process.

It does not terminate existing sessions.

TheOneWP’s Restrict Login Identifier module addresses that part of authentication policy.

For the underlying security considerations, see WordPress Login: Username vs. Email, Which Is More Secure?.

Combine session control with least privilege

Force logout is useful, but the damage a compromised session can cause also depends on what that user is allowed to do.

An account that can only edit its own content presents a different risk from one that can:

  • install plugins;
  • edit themes;
  • create administrators;
  • change global settings;
  • access backups;
  • modify the database;
  • change authentication configuration.

Apply the principle of least privilege so that every account has only the permissions required for its responsibilities.

Review dormant accounts regularly

A forgotten account can remain a valid authentication path long after anybody remembers why it exists.

Examples include:

  • former employees;
  • old agencies;
  • temporary developers;
  • past clients;
  • unused test accounts;
  • abandoned integration users.

Auditing Dormant WordPress User Accounts provides a useful framework for finding accounts that should be reviewed, restricted or removed.

Use last-login information as context, not proof

A last-login timestamp can help administrators notice unusual or dormant accounts.

For example:

User A
Last login: today

User B
Last login: 14 months ago

User C
Last login: never

But the timestamp alone does not prove that an account is safe or compromised.

It is one signal within a broader access review.

The Last Login module can make that information easier to surface during user administration.

How TheOneWP can support immediate access removal

Immediate session termination is only one part of removing access safely.

In practice, administrators often need to answer three questions:

Is this user currently authenticated?

Should existing access end?

Should the account be allowed to log in again?

TheOneWP’s Last Login module provides useful account-activity context, while Block User Login can prevent an account from authenticating again when access should be suspended without deleting the user.

For broader access policies, Access Manager can help centralize restrictions rather than relying only on visual changes to the WordPress administration interface.

The important distinction remains:

Terminate session
+
Control future authentication
+
Control permissions

Each solves a different part of the access problem.

Common force-logout mistakes

Changing the role but leaving sessions untouched when termination is required

If the objective is immediate session termination, explicitly invalidate the sessions.

Destroying sessions but allowing immediate re-login

If access must actually end, also prevent future authentication or change the relevant credentials and access policy.

Deleting the user unnecessarily

Account deletion may affect content ownership and historical records. Suspension can be more appropriate.

Adding a Force Logout button without capability checks

The server must verify that the current administrator is allowed to perform the operation.

Using a nonce as if it were authorization

Nonces help verify request intent and context. Capabilities determine authority.

Trusting the user ID from the request

Validate and sanitize the target identifier before acting on it.

Assuming the browser must visually redirect instantly

Session invalidation prevents subsequent authenticated requests. Already-rendered HTML can remain visible until the browser interacts with WordPress again.

Logging authentication secrets

Audit the event, not reusable credentials or session tokens.

Ignoring Multisite implications

Site membership and authentication sessions are separate concepts.

Using logout as the only response to compromise

Review credentials, permissions, login activity and recent changes as part of a wider incident response.

Force logout checklist

  • Confirm which WordPress user should be logged out.
  • Use the user ID as the operational identifier.
  • Determine whether one session or all sessions should be destroyed.
  • Use WP_Session_Tokens for session invalidation.
  • Use destroy_all() when every session should end.
  • Use selective session destruction only when the target session is reliably identified.
  • Verify the current administrator’s capability.
  • Protect administrative requests with an appropriate nonce.
  • Validate the target user ID.
  • Protect AJAX handlers server-side.
  • Protect REST endpoints with a permission_callback.
  • Do not treat hidden buttons as security.
  • Decide whether the account should be allowed to log in again.
  • Block future authentication when access must remain suspended.
  • Reset credentials when compromise is suspected.
  • Review the user’s role and capabilities.
  • Review custom capabilities.
  • Check recent login activity.
  • Review dormant accounts periodically.
  • Consider recording administrative session-termination events.
  • Never log raw session tokens or authentication cookies.
  • Test the result using a fresh authenticated request.
  • Test AJAX and REST operations where relevant.
  • Consider unsaved content before routine administrative termination.
  • Prioritize containment during genuine security incidents.
  • Review Multisite implications where applicable.
  • Keep session control separate from redirects and login-page customization.
  • Apply least privilege to reduce the impact of compromised sessions.

Related guides

Final recommendation

When you need to force logout a WordPress user immediately, treat the problem as session invalidation rather than as a cosmetic login or interface change.

WordPress already provides the necessary session-management infrastructure through WP_Session_Tokens. If every active login for a user should become invalid, obtain that user’s session manager and use destroy_all(). The old authentication sessions will then fail on subsequent authenticated requests.

Do not stop there when the underlying reason is access removal. Destroying sessions terminates existing authentication, but it does not automatically mean the account cannot authenticate again. If an employee, contractor, client or suspicious account should remain locked out, combine session termination with an explicit future-login restriction.

TheOneWP’s Block User Login module can handle that second part without requiring the WordPress account to be deleted, which is useful when content ownership and historical attribution need to remain intact.

Use Last Login as additional administrative context when reviewing account activity, and periodically follow the practices described in Auditing Dormant WordPress User Accounts so abandoned accounts do not quietly remain valid access paths for years.

Any custom Force Logout interface should enforce permissions on the server, validate the target user, verify the request and avoid exposing session secrets. A button disappearing for unauthorized users is an interface decision; a capability check is the security control.

For suspected compromise, use force logout as one step in a broader response: invalidate sessions, prevent unauthorized re-login, reset credentials where necessary, inspect login activity and review the user’s effective permissions. A WordPress Login Hardening Checklist can then help strengthen the surrounding authentication configuration.

The practical rule is simple: if an existing WordPress session should no longer be trusted, invalidate it explicitly. If the user should no longer have access at all, terminate the sessions and control future authentication as separate actions. That distinction makes forced logout predictable, testable and considerably safer than hoping a role change or hidden menu somehow does the same job.

Simplify your WordPress stack

A modular WordPress toolkit. 104 focused tools.

Ultimately, you can build cleaner workflows, maintain fewer plugins and enable only the features each website actually needs.