diff --git a/includes/openid-connect-generic-client.php b/includes/openid-connect-generic-client.php index 79ae264..916ef04 100644 --- a/includes/openid-connect-generic-client.php +++ b/includes/openid-connect-generic-client.php @@ -232,53 +232,31 @@ class OpenID_Connect_Generic_Client { } /** - * Generate a new state, save it to the states option with a timestamp, - * and return it. + * Generate a new state, save it as a transient, + * and return the state hash. * * @return string */ function new_state() { - $states = get_option( 'openid-connect-generic-valid-states', array() ); - // new state w/ timestamp - $new_state = md5( mt_rand() . microtime( true ) ); - $states[ $new_state ] = time(); - - // save state - update_option( 'openid-connect-generic-valid-states', $states ); + $state = md5( mt_rand() . microtime( true ) ); + $expire = time() + $this->state_time_limit; + set_transient( 'openid-connect-generic-state--' . $state, $state, $expire ); - return $new_state; + return $state; } /** - * Check the validity of a given state + * Check the existence of a given state transient. * * @param $state * * @return bool */ function check_state( $state ) { - $states = get_option( 'openid-connect-generic-valid-states', array() ); - $valid = false; - - // remove any expired states - foreach ( $states as $code => $timestamp ) { - if ( ( $timestamp + $this->state_time_limit ) < time() ) { - unset( $states[ $code ] ); - } - } - - // see if the current state is still within the list of valid states - if ( isset( $states[ $state ] ) ) { - // state is valid, remove it - unset( $states[ $state ] ); - $valid = true; - } - - // save our altered states - update_option( 'openid-connect-generic-valid-states', $states ); + $valid = get_transient( 'openid-connect-generic-state--' . $state ); - return $valid; + return !!$valid; } /**