PHP 8.3.31
Preview: class-wp-session-tokens.php Size: 7.25 KB
//proc/self/root/var/softaculous/sitepad/editor/site-inc/class-wp-session-tokens.php

<?php
/**
 * Session API: WP_Session_Tokens class
 *
 * @package WordPress
 * @subpackage Session
 * @since 4.7.0
 */

/**
 * Abstract class for managing user session tokens.
 *
 * @since 4.0.0
 */
abstract class WP_Session_Tokens {

	/**
	 * User ID.
	 *
	 * @since 4.0.0
	 * @var int User ID.
	 */
	protected $user_id;

	/**
	 * Protected constructor. Use the `get_instance()` method to get the instance.
	 *
	 * @since 4.0.0
	 *
	 * @param int $user_id User whose session to manage.
	 */
	protected function __construct( $user_id ) {
		$this->user_id = $user_id;
	}

	/**
	 * Retrieves a session manager instance for a user.
	 *
	 * This method contains a {@see 'session_token_manager'} filter, allowing a plugin to swap out
	 * the session manager for a subclass of `WP_Session_Tokens`.
	 *
	 * @since 4.0.0
	 *
	 * @param int $user_id User whose session to manage.
	 * @return WP_Session_Tokens The session object, which is by default an instance of
	 *                           the `WP_User_Meta_Session_Tokens` class.
	 */
	final public static function get_instance( $user_id ) {
		/**
		 * Filters the class name for the session token manager.
		 *
		 * @since 4.0.0
		 *
		 * @param string $session Name of class to use as the manager.
		 *                        Default 'WP_User_Meta_Session_Tokens'.
		 */
		$manager = apply_filters( 'session_token_manager', 'WP_User_Meta_Session_Tokens' );
		return new $manager( $user_id );
	}

	/**
	 * Hashes the given session token for storage.
	 *
	 * @since 4.0.0
	 *
	 * @param string $token Session token to hash.
	 * @return string A hash of the session token (a verifier).
	 */
	private function hash_token( $token ) {
		// If ext/hash is not present, use sha1() instead.
		if ( function_exists( 'hash' ) ) {
			return hash( 'sha256', $token );
		} else {
			return sha1( $token );
		}
	}

	/**
	 * Retrieves a user's session for the given token.
	 *
	 * @since 4.0.0
	 *
	 * @param string $token Session token.
	 * @return array|null The session, or null if it does not exist.
	 */
	final public function get( $token ) {
		$verifier = $this->hash_token( $token );
		return $this->get_session( $verifier );
	}

	/**
	 * Validates the given session token for authenticity and validity.
	 *
	 * Checks that the given token is present and hasn't expired.
	 *
	 * @since 4.0.0
	 *
	 * @param string $token Token to verify.
	 * @return bool Whether the token is valid for the user.
	 */
	final public function verify( $token ) {
		$verifier = $this->hash_token( $token );
		return (bool) $this->get_session( $verifier );
	}

	/**
	 * Generates a session token and attaches session information to it.
	 *
	 * A session token is a long, random string. It is used in a cookie
	 * to link that cookie to an expiration time and to ensure the cookie
	 * becomes invalidated when the user logs out.
	 *
	 * This function generates a token and stores it with the associated
	 * expiration time (and potentially other session information via the
	 * {@see 'attach_session_information'} filter).
	 *
	 * @since 4.0.0
	 *
	 * @param int $expiration Session expiration timestamp.
	 * @return string Session token.
	 */
	final public function create( $expiration ) {
		/**
		 * Filters the information attached to the newly created session.
		 *
		 * Can be used to attach further information to a session.
		 *
		 * @since 4.0.0
		 *
		 * @param array $session Array of extra data.
		 * @param int   $user_id User ID.
		 */
		$session               = apply_filters( 'attach_session_information', array(), $this->user_id );
		$session['expiration'] = $expiration;

		// IP address.
		if ( ! empty( $_SERVER['REMOTE_ADDR'] ) ) {
			$session['ip'] = $_SERVER['REMOTE_ADDR'];
		}

		// User-agent.
		if ( ! empty( $_SERVER['HTTP_USER_AGENT'] ) ) {
			$session['ua'] = wp_unslash( $_SERVER['HTTP_USER_AGENT'] );
		}

		// Timestamp
		$session['login'] = time();

		$token = wp_generate_password( 43, false, false );

		$this->update( $token, $session );

		return $token;
	}

	/**
	 * Updates the data for the session with the given token.
	 *
	 * @since 4.0.0
	 *
	 * @param string $token Session token to update.
	 * @param array  $session Session information.
	 */
	final public function update( $token, $session ) {
		$verifier = $this->hash_token( $token );
		$this->update_session( $verifier, $session );
	}

	/**
	 * Destroys the session with the given token.
	 *
	 * @since 4.0.0
	 *
	 * @param string $token Session token to destroy.
	 */
	final public function destroy( $token ) {
		$verifier = $this->hash_token( $token );
		$this->update_session( $verifier, null );
	}

	/**
	 * Destroys all sessions for this user except the one with the given token (presumably the one in use).
	 *
	 * @since 4.0.0
	 *
	 * @param string $token_to_keep Session token to keep.
	 */
	final public function destroy_others( $token_to_keep ) {
		$verifier = $this->hash_token( $token_to_keep );
		$session  = $this->get_session( $verifier );
		if ( $session ) {
			$this->destroy_other_sessions( $verifier );
		} else {
			$this->destroy_all_sessions();
		}
	}

	/**
	 * Determines whether a session is still valid, based on its expiration timestamp.
	 *
	 * @since 4.0.0
	 *
	 * @param array $session Session to check.
	 * @return bool Whether session is valid.
	 */
	final protected function is_still_valid( $session ) {
		return $session['expiration'] >= time();
	}

	/**
	 * Destroys all sessions for a user.
	 *
	 * @since 4.0.0
	 */
	final public function destroy_all() {
		$this->destroy_all_sessions();
	}

	/**
	 * Destroys all sessions for all users.
	 *
	 * @since 4.0.0
	 */
	final public static function destroy_all_for_all_users() {
		/** This filter is documented in site-inc/class-wp-session-tokens.php */
		$manager = apply_filters( 'session_token_manager', 'WP_User_Meta_Session_Tokens' );
		call_user_func( array( $manager, 'drop_sessions' ) );
	}

	/**
	 * Retrieves all sessions for a user.
	 *
	 * @since 4.0.0
	 *
	 * @return array Sessions for a user.
	 */
	final public function get_all() {
		return array_values( $this->get_sessions() );
	}

	/**
	 * Retrieves all sessions of the user.
	 *
	 * @since 4.0.0
	 *
	 * @return array Sessions of the user.
	 */
	abstract protected function get_sessions();

	/**
	 * Retrieves a session based on its verifier (token hash).
	 *
	 * @since 4.0.0
	 *
	 * @param string $verifier Verifier for the session to retrieve.
	 * @return array|null The session, or null if it does not exist.
	 */
	abstract protected function get_session( $verifier );

	/**
	 * Updates a session based on its verifier (token hash).
	 *
	 * Omitting the second argument destroys the session.
	 *
	 * @since 4.0.0
	 *
	 * @param string $verifier Verifier for the session to update.
	 * @param array  $session  Optional. Session. Omitting this argument destroys the session.
	 */
	abstract protected function update_session( $verifier, $session = null );

	/**
	 * Destroys all sessions for this user, except the single session with the given verifier.
	 *
	 * @since 4.0.0
	 *
	 * @param string $verifier Verifier of the session to keep.
	 */
	abstract protected function destroy_other_sessions( $verifier );

	/**
	 * Destroys all sessions for the user.
	 *
	 * @since 4.0.0
	 */
	abstract protected function destroy_all_sessions();

	/**
	 * Destroys all sessions for all users.
	 *
	 * @since 4.0.0
	 */
	public static function drop_sessions() {}
}

Directory Contents

Dirs: 16 × Files: 162

Name Size Perms Modified Actions
- drwxr-xr-x 2026-04-23 17:49:26
Edit Download
css DIR
- drwxr-xr-x 2026-04-23 17:49:26
Edit Download
customize DIR
- drwxr-xr-x 2026-04-23 17:49:26
Edit Download
ID3 DIR
- drwxr-xr-x 2026-04-23 17:49:26
Edit Download
images DIR
- drwxr-xr-x 2026-04-23 17:49:26
Edit Download
IXR DIR
- drwxr-xr-x 2026-04-23 17:49:26
Edit Download
js DIR
- drwxr-xr-x 2026-04-23 17:49:26
Edit Download
PHPMailer DIR
- drwxr-xr-x 2026-04-23 17:49:26
Edit Download
pomo DIR
- drwxr-xr-x 2026-04-23 17:49:26
Edit Download
- drwxr-xr-x 2026-04-23 17:49:26
Edit Download
Requests DIR
- drwxr-xr-x 2026-04-23 17:49:26
Edit Download
rest-api DIR
- drwxr-xr-x 2026-04-23 17:49:26
Edit Download
SimplePie DIR
- drwxr-xr-x 2026-04-23 17:49:26
Edit Download
Text DIR
- drwxr-xr-x 2026-04-23 17:49:26
Edit Download
- drwxr-xr-x 2026-04-23 17:49:26
Edit Download
widgets DIR
- drwxr-xr-x 2026-04-23 17:49:26
Edit Download
29.03 KB lrw-r--r-- 2026-04-22 07:17:42
Edit Download
11.56 KB lrw-r--r-- 2026-04-22 07:17:42
Edit Download
16.22 KB lrw-r--r-- 2026-04-22 07:17:42
Edit Download
12.43 KB lrw-r--r-- 2026-04-22 07:17:42
Edit Download
11.64 KB lrw-r--r-- 2026-04-22 07:17:42
Edit Download
13.55 KB lrw-r--r-- 2026-04-22 07:17:42
Edit Download
4.11 KB lrw-r--r-- 2026-04-22 07:17:42
Edit Download
21.35 KB lrw-r--r-- 2026-04-22 07:17:42
Edit Download
27.83 KB lrw-r--r-- 2026-04-22 07:17:42
Edit Download
28.84 KB lrw-r--r-- 2026-04-22 07:17:42
Edit Download
50.80 KB lrw-r--r-- 2026-04-22 07:17:42
Edit Download
12.41 KB lrw-r--r-- 2026-04-22 07:17:42
Edit Download
523 B lrw-r--r-- 2026-04-22 07:17:42
Edit Download
36.22 KB lrw-r--r-- 2026-04-22 07:17:42
Edit Download
2.51 KB lrw-r--r-- 2026-04-22 07:17:42
Edit Download
39.53 KB lrw-r--r-- 2026-04-22 07:17:42
Edit Download
30.73 KB lrw-r--r-- 2026-04-22 07:17:42
Edit Download
7.15 KB lrw-r--r-- 2026-04-22 07:17:42
Edit Download
668 B lrw-r--r-- 2026-04-22 07:17:42
Edit Download
20.43 KB lrw-r--r-- 2026-04-22 07:17:42
Edit Download
29.09 KB lrw-r--r-- 2026-04-22 07:17:42
Edit Download
87.17 KB lrw-r--r-- 2026-04-22 07:17:42
Edit Download
461 B lrw-r--r-- 2026-04-22 07:17:42
Edit Download
2.07 KB lrw-r--r-- 2026-04-22 07:17:42
Edit Download
6.62 KB lrw-r--r-- 2026-04-22 07:17:42
Edit Download
13.33 KB lrw-r--r-- 2026-04-22 07:17:42
Edit Download
8.38 KB lrw-r--r-- 2026-04-22 07:17:42
Edit Download
2.24 KB lrw-r--r-- 2026-04-22 07:17:42
Edit Download
6.78 KB lrw-r--r-- 2026-04-22 07:17:42
Edit Download
16.08 KB lrw-r--r-- 2026-04-22 07:17:42
Edit Download
5.01 KB lrw-r--r-- 2026-04-22 07:17:42
Edit Download
14.86 KB lrw-r--r-- 2026-04-22 07:17:42
Edit Download
4.63 KB lrw-r--r-- 2026-04-22 07:17:42
Edit Download
4.70 KB lrw-r--r-- 2026-04-22 07:17:42
Edit Download
42.21 KB lrw-r--r-- 2026-04-22 07:17:42
Edit Download
8.75 KB lrw-r--r-- 2026-04-22 07:17:42
Edit Download
24.49 KB lrw-r--r-- 2026-04-22 07:17:42
Edit Download
195.47 KB lrw-r--r-- 2026-04-22 07:17:42
Edit Download
53.08 KB lrw-r--r-- 2026-04-22 07:17:42
Edit Download
9.42 KB lrw-r--r-- 2026-04-22 07:17:42
Edit Download
9.99 KB lrw-r--r-- 2026-04-22 07:17:42
Edit Download
27.59 KB lrw-r--r-- 2026-04-22 07:17:42
Edit Download
2.28 KB lrw-r--r-- 2026-04-22 07:17:42
Edit Download
66.27 KB lrw-r--r-- 2026-04-22 07:17:42
Edit Download
14.38 KB lrw-r--r-- 2026-04-22 07:17:42
Edit Download
4.81 KB lrw-r--r-- 2026-04-22 07:17:42
Edit Download
2.50 KB lrw-r--r-- 2026-04-22 07:17:42
Edit Download
749 B lrw-r--r-- 2026-04-22 07:17:42
Edit Download
13.77 KB lrw-r--r-- 2026-04-22 07:17:42
Edit Download
6.44 KB lrw-r--r-- 2026-04-22 07:17:42
Edit Download
11.64 KB lrw-r--r-- 2026-04-22 07:17:42
Edit Download
6.35 KB lrw-r--r-- 2026-04-22 07:17:42
Edit Download
3.25 KB lrw-r--r-- 2026-04-22 07:17:42
Edit Download
5.92 KB lrw-r--r-- 2026-04-22 07:17:42
Edit Download
1.83 KB lrw-r--r-- 2026-04-22 07:17:42
Edit Download
4.19 KB lrw-r--r-- 2026-04-22 07:17:42
Edit Download
2.80 KB lrw-r--r-- 2026-04-22 07:17:42
Edit Download
15.02 KB lrw-r--r-- 2026-04-22 07:17:42
Edit Download
13.18 KB lrw-r--r-- 2026-04-22 07:17:42
Edit Download
21.27 KB lrw-r--r-- 2026-04-22 07:17:42
Edit Download
11.49 KB lrw-r--r-- 2026-04-22 07:17:42
Edit Download
6.25 KB lrw-r--r-- 2026-04-22 07:17:42
Edit Download
4.91 KB lrw-r--r-- 2026-04-22 07:17:42
Edit Download
14.26 KB lrw-r--r-- 2026-04-22 07:17:42
Edit Download
1.76 KB lrw-r--r-- 2026-04-22 07:17:42
Edit Download
22.86 KB lrw-r--r-- 2026-04-22 07:17:42
Edit Download
5.26 KB lrw-r--r-- 2026-04-22 07:17:42
Edit Download
16.79 KB lrw-r--r-- 2026-04-22 07:17:42
Edit Download
11.93 KB lrw-r--r-- 2026-04-22 07:17:42
Edit Download
5.88 KB lrw-r--r-- 2026-04-22 07:17:42
Edit Download
17.81 KB lrw-r--r-- 2026-04-22 07:17:42
Edit Download
6.28 KB lrw-r--r-- 2026-04-22 07:17:42
Edit Download
127.67 KB lrw-r--r-- 2026-04-22 07:17:42
Edit Download
58.42 KB lrw-r--r-- 2026-04-22 07:17:42
Edit Download
2.60 KB lrw-r--r-- 2026-04-22 07:17:42
Edit Download
8.13 KB lrw-r--r-- 2026-04-22 07:17:42
Edit Download
7.25 KB lrw-r--r-- 2026-04-22 07:17:42
Edit Download
2.27 KB lrw-r--r-- 2026-04-22 07:17:42
Edit Download
1.73 KB lrw-r--r-- 2026-04-22 07:17:42
Edit Download
26.78 KB lrw-r--r-- 2026-04-22 07:17:42
Edit Download
7.13 KB lrw-r--r-- 2026-04-22 07:17:42
Edit Download
18.81 KB lrw-r--r-- 2026-04-22 07:17:42
Edit Download
10.41 KB lrw-r--r-- 2026-04-22 07:17:42
Edit Download
33.84 KB lrw-r--r-- 2026-04-22 07:17:42
Edit Download
5.14 KB lrw-r--r-- 2026-04-22 07:17:42
Edit Download
716 B lrw-r--r-- 2026-04-22 07:17:42
Edit Download
16.06 KB lrw-r--r-- 2026-04-22 07:17:42
Edit Download
48.09 KB lrw-r--r-- 2026-04-22 07:17:42
Edit Download
2.92 KB lrw-r--r-- 2026-04-22 07:17:42
Edit Download
30.49 KB lrw-r--r-- 2026-04-22 07:17:42
Edit Download
20.91 KB lrw-r--r-- 2026-04-22 07:17:42
Edit Download
12.39 KB lrw-r--r-- 2026-04-22 07:17:42
Edit Download
3.69 KB lrw-r--r-- 2026-04-22 07:17:42
Edit Download
17.41 KB lrw-r--r-- 2026-04-22 07:17:42
Edit Download
202.08 KB lrw-r--r-- 2026-04-22 07:17:42
Edit Download
24.18 KB lrw-r--r-- 2026-04-22 07:17:42
Edit Download
11.24 KB lrw-r--r-- 2026-04-22 07:17:42
Edit Download
17.40 KB lrw-r--r-- 2026-04-22 07:17:42
Edit Download
9.61 KB lrw-r--r-- 2026-04-22 07:17:42
Edit Download
87.64 KB lrw-r--r-- 2026-04-22 07:17:42
Edit Download
111.72 KB lrw-r--r-- 2026-04-22 07:17:42
Edit Download
15.99 KB lrw-r--r-- 2026-04-22 07:17:42
Edit Download
30.82 KB lrw-r--r-- 2026-04-22 07:17:42
Edit Download
34.34 KB lrw-r--r-- 2026-04-22 07:17:42
Edit Download
9.61 KB lrw-r--r-- 2026-04-22 07:17:42
Edit Download
24.76 KB lrw-r--r-- 2026-04-22 07:17:42
Edit Download
2.13 KB lrw-r--r-- 2026-04-22 07:17:42
Edit Download
44.04 KB lrw-r--r-- 2026-04-22 07:17:42
Edit Download
5.33 KB lrw-r--r-- 2026-04-22 07:17:42
Edit Download
3.09 KB lrw-r--r-- 2026-04-22 07:17:42
Edit Download
2.67 KB lrw-r--r-- 2026-04-22 07:17:42
Edit Download
1.25 KB lrw-r--r-- 2026-04-22 07:17:42
Edit Download
4.09 KB lrw-r--r-- 2026-04-22 07:17:42
Edit Download
3.77 KB lrw-r--r-- 2026-04-22 07:17:42
Edit Download
19.29 KB lrw-r--r-- 2026-04-22 07:17:42
Edit Download
280.29 KB lrw-r--r-- 2026-04-22 07:17:42
Edit Download
210.22 KB lrw-r--r-- 2026-04-22 07:17:42
Edit Download
12.53 KB lrw-r--r-- 2026-04-22 07:17:42
Edit Download
8.03 KB lrw-r--r-- 2026-04-22 07:17:42
Edit Download
138.46 KB lrw-r--r-- 2026-04-22 07:17:42
Edit Download
21.90 KB lrw-r--r-- 2026-04-22 07:17:42
Edit Download
57.23 KB lrw-r--r-- 2026-04-22 07:17:42
Edit Download
50.67 KB lrw-r--r-- 2026-04-22 07:17:42
Edit Download
135.40 KB lrw-r--r-- 2026-04-22 07:17:42
Edit Download
36.40 KB lrw-r--r-- 2026-04-22 07:17:42
Edit Download
46.33 KB lrw-r--r-- 2026-04-22 07:17:42
Edit Download
141.33 KB lrw-r--r-- 2026-04-22 07:17:42
Edit Download
44.98 KB lrw-r--r-- 2026-04-22 07:17:42
Edit Download
39.54 KB lrw-r--r-- 2026-04-22 07:17:42
Edit Download
21.20 KB lrw-r--r-- 2026-04-22 07:17:42
Edit Download
39.57 KB lrw-r--r-- 2026-04-22 07:17:42
Edit Download
21 B lrw-r--r-- 2026-04-22 07:17:42
Edit Download
67.91 KB lrw-r--r-- 2026-04-22 07:17:42
Edit Download
97.52 KB lrw-r--r-- 2026-04-22 07:17:42
Edit Download
31.37 KB lrw-r--r-- 2026-04-22 07:17:42
Edit Download
6.86 KB lrw-r--r-- 2026-04-22 07:17:42
Edit Download
60.22 KB lrw-r--r-- 2026-04-22 07:17:42
Edit Download
8.75 KB lrw-r--r-- 2026-04-22 07:17:42
Edit Download
227.37 KB lrw-r--r-- 2026-04-22 07:17:42
Edit Download
31.24 KB lrw-r--r-- 2026-04-22 07:17:42
Edit Download
40.67 KB lrw-r--r-- 2026-04-22 07:17:42
Edit Download
21.08 KB lrw-r--r-- 2026-04-22 07:17:42
Edit Download
17.27 KB lrw-r--r-- 2026-04-22 07:17:42
Edit Download
5.06 KB lrw-r--r-- 2026-04-22 07:17:42
Edit Download
22.66 KB lrw-r--r-- 2026-04-22 07:17:42
Edit Download
98.75 KB lrw-r--r-- 2026-04-22 07:17:42
Edit Download
20.25 KB lrw-r--r-- 2026-04-22 07:17:42
Edit Download
19.73 KB lrw-r--r-- 2026-04-22 07:17:42
Edit Download
21.99 KB lrw-r--r-- 2026-04-22 07:17:42
Edit Download
2.51 KB lrw-r--r-- 2026-04-22 07:17:42
Edit Download
152.95 KB lrw-r--r-- 2026-04-22 07:17:42
Edit Download
2.55 KB lrw-r--r-- 2026-04-22 07:17:42
Edit Download
19.77 KB lrw-r--r-- 2026-04-22 07:17:42
Edit Download
99.09 KB lrw-r--r-- 2026-04-22 07:17:42
Edit Download
24.81 KB lrw-r--r-- 2026-04-22 07:17:42
Edit Download
120.69 KB lrw-r--r-- 2026-04-22 07:17:42
Edit Download
5.59 KB lrw-r--r-- 2026-04-22 07:17:42
Edit Download
2.03 KB lrw-r--r-- 2026-04-22 07:17:42
Edit Download
55.82 KB lrw-r--r-- 2026-04-22 07:17:42
Edit Download
1.03 KB lrw-r--r-- 2026-04-22 07:17:42
Edit Download
99.29 KB lrw-r--r-- 2026-04-22 07:17:42
Edit Download
662 B lrw-r--r-- 2026-04-22 07:17:42
Edit Download

If ZipArchive is unavailable, a .tar will be created (no compression).