WordPress 4.5
[autoinstalls/wordpress.git] / wp-includes / session.php
index 2acaad31d5dddd0881bcff733de48fa4a7f5168e..409fe30a406c7399985617da4d2acc1da7e680bc 100644 (file)
@@ -131,6 +131,19 @@ abstract class WP_Session_Tokens {
                $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 );
@@ -262,6 +275,7 @@ abstract class WP_Session_Tokens {
         * @access protected
         *
         * @param string $verifier Verifier of the session to update.
+        * @param array  $session  Optional. Session. Omitting this argument destroys the session.
         */
        abstract protected function update_session( $verifier, $session = null );
 
@@ -383,10 +397,6 @@ class WP_User_Meta_Session_Tokens extends WP_Session_Tokens {
         * @param array $sessions Sessions.
         */
        protected function update_sessions( $sessions ) {
-               if ( ! has_filter( 'attach_session_information' ) ) {
-                       $sessions = wp_list_pluck( $sessions, 'expiration' );
-               }
-
                if ( $sessions ) {
                        update_user_meta( $this->user_id, 'session_tokens', $sessions );
                } else {
@@ -425,6 +435,6 @@ class WP_User_Meta_Session_Tokens extends WP_Session_Tokens {
         * @static
         */
        public static function drop_sessions() {
-               delete_metadata( 'user', false, 'session_tokens', false, true );
+               delete_metadata( 'user', 0, 'session_tokens', false, true );
        }
 }