[ Index ]

PHP Cross Reference of WordPress Trunk (Updated Daily)

Search

title

Body

[close]

/wp-includes/ -> class-wp-user-meta-session-tokens.php (source)

   1  <?php
   2  /**
   3   * Session API: WP_User_Meta_Session_Tokens class
   4   *
   5   * @package WordPress
   6   * @subpackage Session
   7   * @since 4.7.0
   8   */
   9  
  10  /**
  11   * Meta-based user sessions token manager.
  12   *
  13   * @since 4.0.0
  14   *
  15   * @see WP_Session_Tokens
  16   */
  17  class WP_User_Meta_Session_Tokens extends WP_Session_Tokens {
  18  
  19      /**
  20       * Retrieves all sessions of the user.
  21       *
  22       * @since 4.0.0
  23       *
  24       * @return array Sessions of the user.
  25       */
  26  	protected function get_sessions() {
  27          $sessions = get_user_meta( $this->user_id, 'session_tokens', true );
  28  
  29          if ( ! is_array( $sessions ) ) {
  30              return array();
  31          }
  32  
  33          $sessions = array_map( array( $this, 'prepare_session' ), $sessions );
  34          return array_filter( $sessions, array( $this, 'is_still_valid' ) );
  35      }
  36  
  37      /**
  38       * Converts an expiration to an array of session information.
  39       *
  40       * @since 4.0.0
  41       *
  42       * @param mixed $session Session or expiration.
  43       * @return array Session.
  44       */
  45  	protected function prepare_session( $session ) {
  46          if ( is_int( $session ) ) {
  47              return array( 'expiration' => $session );
  48          }
  49  
  50          return $session;
  51      }
  52  
  53      /**
  54       * Retrieves a session based on its verifier (token hash).
  55       *
  56       * @since 4.0.0
  57       *
  58       * @param string $verifier Verifier for the session to retrieve.
  59       * @return array|null The session, or null if it does not exist
  60       */
  61  	protected function get_session( $verifier ) {
  62          $sessions = $this->get_sessions();
  63          return $sessions[ $verifier ] ?? null;
  64      }
  65  
  66      /**
  67       * Updates a session based on its verifier (token hash).
  68       *
  69       * @since 4.0.0
  70       *
  71       * @param string $verifier Verifier for the session to update.
  72       * @param array  $session  Optional. Session. Omitting this argument destroys the session.
  73       */
  74  	protected function update_session( $verifier, $session = null ) {
  75          $sessions = $this->get_sessions();
  76  
  77          if ( $session ) {
  78              $sessions[ $verifier ] = $session;
  79          } else {
  80              unset( $sessions[ $verifier ] );
  81          }
  82  
  83          $this->update_sessions( $sessions );
  84      }
  85  
  86      /**
  87       * Updates the user's sessions in the usermeta table.
  88       *
  89       * @since 4.0.0
  90       *
  91       * @param array $sessions Sessions.
  92       */
  93  	protected function update_sessions( $sessions ) {
  94          if ( $sessions ) {
  95              update_user_meta( $this->user_id, 'session_tokens', $sessions );
  96          } else {
  97              delete_user_meta( $this->user_id, 'session_tokens' );
  98          }
  99      }
 100  
 101      /**
 102       * Destroys all sessions for this user, except the single session with the given verifier.
 103       *
 104       * @since 4.0.0
 105       *
 106       * @param string $verifier Verifier of the session to keep.
 107       */
 108  	protected function destroy_other_sessions( $verifier ) {
 109          $session = $this->get_session( $verifier );
 110          $this->update_sessions( array( $verifier => $session ) );
 111      }
 112  
 113      /**
 114       * Destroys all session tokens for the user.
 115       *
 116       * @since 4.0.0
 117       */
 118  	protected function destroy_all_sessions() {
 119          $this->update_sessions( array() );
 120      }
 121  
 122      /**
 123       * Destroys all sessions for all users.
 124       *
 125       * @since 4.0.0
 126       */
 127  	public static function drop_sessions() {
 128          delete_metadata( 'user', 0, 'session_tokens', false, true );
 129      }
 130  }


Generated : Wed Apr 15 08:20:10 2026 Cross-referenced by PHPXref