LLMS_Abstract_Session_Database_Handler
LLMS_Abstract_Session
Source Source
File: includes/abstracts/llms-abstract-session-database-handler.php
abstract class LLMS_Abstract_Session_Database_Handler extends LLMS_Abstract_Session_Data { /** * Cache group name, used for WP caching functions * * @var string */ protected $cache_group = 'llms_session_id'; /** * Delete all sessions from the database * * This method is the callback function for the `llms_delete_expired_session_data` cron event, which * deletes expired sessions hourly. * * This method is also used by the admin tool to remove *all* sessions on demand. * * @since 4.0.0 * * @param boolean $expired_only If `true`, only delete expired sessions, otherwise deletes all events. * @return int */ public function clean( $expired_only = true ) { global $wpdb; $query = "DELETE FROM {$wpdb->prefix}lifterlms_sessions"; if ( $expired_only ) { $query .= $wpdb->prepare( ' WHERE expires < %d', time() ); } LLMS_Cache_Helper::invalidate_group( $this->cache_group ); return $wpdb->query( $query ); // phpcs:ignore: WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching, WordPress.DB.PreparedSQL.NotPrepared } /** * Delete a session from the database * * @since 4.0.0 * * @param string $id Session key. * @return boolean */ public function delete( $id ) { wp_cache_delete( $this->get_cache_key( $id ), $this->cache_group ); global $wpdb; return (bool) $wpdb->delete( // phpcs:ignore: WordPress.DB.DirectDatabaseQuery.DirectQuery $wpdb->prefix . 'lifterlms_sessions', array( 'session_key' => $id, ) ); } /** * Retrieve a prefixed cache key * * @since 4.0.0 * * @param string $key Unprefixed cache key. * @return string */ protected function get_cache_key( $key ) { return LLMS_Cache_Helper::get_prefix( $this->cache_group ) . $key; } /** * Save the session to the database * * @since 4.0.0 * * @param int $expires Timestamp of the session expiration. * @return boolean */ public function save( $expires ) { // Only save if we have data to save. if ( $this->is_clean ) { return false; } global $wpdb; $save = $wpdb->query( // phpcs:ignore: WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching $wpdb->prepare( "INSERT INTO {$wpdb->prefix}lifterlms_sessions ( `session_key`, `data`, `expires` ) VALUES ( %s, %s, %d ) ON DUPLICATE KEY UPDATE `data` = VALUES ( `data` ), `expires` = VALUES ( `expires` )", $this->get_id(), maybe_serialize( $this->data ), $expires ) ); wp_cache_set( $this->get_cache_key( $this->get_id() ), $this->data, $this->cache_group, $expires - time() ); $this->is_clean = true; return (bool) $save; } /** * Retrieve session data from the database * * @since 4.0.0 * * @param string $key Session key. * @param array $default Default value used when no data exists. * @return string|array */ public function read( $key, $default = array() ) { $cache_key = $this->get_cache_key( $key ); $data = wp_cache_get( $cache_key, $this->cache_group ); if ( false === $data ) { global $wpdb; $data = $wpdb->get_var( $wpdb->prepare( "SELECT `data` FROM {$wpdb->prefix}lifterlms_sessions WHERE `session_key` = %s", $key ) ); // phpcs:ignore: WordPress.DB.DirectDatabaseQuery.DirectQuery if ( is_null( $data ) ) { $data = $default; } $duration = $this->expires - time(); if ( 0 < $duration ) { wp_cache_set( $cache_key, $data, $this->cache_group, $duration ); } } return maybe_unserialize( $data ); } }
Expand full source code Collapse full source code View on GitHub
Methods Methods
- clean — Delete all sessions from the database
- delete — Delete a session from the database
- get_cache_key — Retrieve a prefixed cache key
- read — Retrieve session data from the database
- save — Save the session to the database
Changelog Changelog
Version | Description |
---|---|
4.0.0 | Introduced. |