"Fossies" - the Fresh Open Source Software Archive 
Member "wordpress/wp-includes/class-wp-user-meta-session-tokens.php" (9 Jan 2019, 2990 Bytes) of package /linux/www/wordpress-5.7-RC1.tar.gz:
As a special service "Fossies" has tried to format the requested source page into HTML format using (guessed) PHP source code syntax highlighting (style:
standard) with prefixed line numbers and
code folding option.
Alternatively you can here
view or
download the uninterpreted source code file.
For more information about "class-wp-user-meta-session-tokens.php" see the
Fossies "Dox" file reference documentation.
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 * @param mixed $session Session or expiration.
41 * @return array Session.
42 */
43 protected function prepare_session( $session ) {
44 if ( is_int( $session ) ) {
45 return array( 'expiration' => $session );
46 }
47
48 return $session;
49 }
50
51 /**
52 * Retrieves a session based on its verifier (token hash).
53 *
54 * @since 4.0.0
55 *
56 * @param string $verifier Verifier for the session to retrieve.
57 * @return array|null The session, or null if it does not exist
58 */
59 protected function get_session( $verifier ) {
60 $sessions = $this->get_sessions();
61
62 if ( isset( $sessions[ $verifier ] ) ) {
63 return $sessions[ $verifier ];
64 }
65
66 return null;
67 }
68
69 /**
70 * Updates a session based on its verifier (token hash).
71 *
72 * @since 4.0.0
73 *
74 * @param string $verifier Verifier for the session to update.
75 * @param array $session Optional. Session. Omitting this argument destroys the session.
76 */
77 protected function update_session( $verifier, $session = null ) {
78 $sessions = $this->get_sessions();
79
80 if ( $session ) {
81 $sessions[ $verifier ] = $session;
82 } else {
83 unset( $sessions[ $verifier ] );
84 }
85
86 $this->update_sessions( $sessions );
87 }
88
89 /**
90 * Updates the user's sessions in the usermeta table.
91 *
92 * @since 4.0.0
93 *
94 * @param array $sessions Sessions.
95 */
96 protected function update_sessions( $sessions ) {
97 if ( $sessions ) {
98 update_user_meta( $this->user_id, 'session_tokens', $sessions );
99 } else {
100 delete_user_meta( $this->user_id, 'session_tokens' );
101 }
102 }
103
104 /**
105 * Destroys all sessions for this user, except the single session with the given verifier.
106 *
107 * @since 4.0.0
108 *
109 * @param string $verifier Verifier of the session to keep.
110 */
111 protected function destroy_other_sessions( $verifier ) {
112 $session = $this->get_session( $verifier );
113 $this->update_sessions( array( $verifier => $session ) );
114 }
115
116 /**
117 * Destroys all session tokens for the user.
118 *
119 * @since 4.0.0
120 */
121 protected function destroy_all_sessions() {
122 $this->update_sessions( array() );
123 }
124
125 /**
126 * Destroys all sessions for all users.
127 *
128 * @since 4.0.0
129 */
130 public static function drop_sessions() {
131 delete_metadata( 'user', 0, 'session_tokens', false, true );
132 }
133 }