Session.php 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155
  1. <?php
  2. /**
  3. * NF Session
  4. *
  5. * This is a wrapper class for WP_Session / PHP $_SESSION and handles the storage of cart items, purchase sessions, etc
  6. *
  7. * @package Ninja Forms
  8. * @subpackage Classes/Session
  9. * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License
  10. * @since 2.9.18
  11. */
  12. // Exit if accessed directly
  13. if ( ! defined( 'ABSPATH' ) ) exit;
  14. /**
  15. * NF_Session Class
  16. *
  17. * @since 1.5
  18. */
  19. class NF_Session {
  20. /**
  21. * Holds our session data
  22. *
  23. * @var array
  24. * @access private
  25. * @since 2.9.18
  26. */
  27. private $session;
  28. /**
  29. * Session index prefix
  30. *
  31. * @var string
  32. * @access private
  33. * @since 2.9.18
  34. */
  35. private $prefix = '';
  36. /**
  37. * Get things started
  38. *
  39. * Defines our WP_Session constants, includes the necessary libraries and
  40. * retrieves the WP Session instance
  41. *
  42. * @since 2.9.18
  43. */
  44. public function __construct() {
  45. // Use WP_Session (default)
  46. if ( ! defined( 'WP_SESSION_COOKIE' ) ) {
  47. define( 'WP_SESSION_COOKIE', 'nf_wp_session' );
  48. }
  49. if ( ! class_exists( 'Recursive_ArrayAccess' ) ) {
  50. require_once Ninja_Forms::$dir . 'includes/Libraries/Session/class-recursive-arrayaccess.php';
  51. }
  52. if ( ! class_exists( 'WP_Session' ) ) {
  53. require_once Ninja_Forms::$dir . 'includes/Libraries/Session/class-wp-session.php';
  54. require_once Ninja_Forms::$dir . 'includes/Libraries/Session/wp-session.php';
  55. }
  56. add_filter( 'wp_session_expiration_variant', array( $this, 'set_expiration_variant_time' ), 99999 );
  57. add_filter( 'wp_session_expiration', array( $this, 'set_expiration_time' ), 99999 );
  58. // Since we only loading this as needed, we will need to call init() manually.
  59. // add_action( 'plugins_loaded', array( $this, 'init' ), -1 );
  60. }
  61. /**
  62. * Setup the WP_Session instance
  63. *
  64. * @access public
  65. * @since 2.9.18
  66. * @return void
  67. */
  68. public function init() {
  69. $this->session = WP_Session::get_instance();
  70. return $this->session;
  71. }
  72. /**
  73. * Retrieve session ID
  74. *
  75. * @access public
  76. * @since 2.9.18
  77. * @return string Session ID
  78. */
  79. public function get_id() {
  80. return $this->session->session_id;
  81. }
  82. /**
  83. * Retrieve a session variable
  84. *
  85. * @access public
  86. * @since 2.9.18
  87. * @param string $key Session key
  88. * @return string Session variable
  89. */
  90. public function get( $key ) {
  91. $key = sanitize_key( $key );
  92. return isset( $this->session[ $key ] ) ? maybe_unserialize( $this->session[ $key ] ) : false;
  93. }
  94. /**
  95. * Set a session variable
  96. *
  97. * @since 2.9.18
  98. * @param string $key Session key
  99. * @param integer $value Session variable
  100. * @return string Session variable
  101. */
  102. public function set( $key, $value ) {
  103. /*
  104. * Manually Set Cookie
  105. */
  106. $this->session->set_cookie();
  107. $key = sanitize_key( $key );
  108. if ( is_array( $value ) ) {
  109. $this->session[ $key ] = serialize( $value );
  110. } else {
  111. $this->session[ $key ] = $value;
  112. }
  113. return $this->session[ $key ];
  114. }
  115. /**
  116. * Delete a session variable
  117. *
  118. * @since 2.9.28
  119. * @param string $key
  120. * @return void
  121. */
  122. public function delete() {
  123. delete_option( '_wp_session_' . $this->session->session_id );
  124. delete_option( '_wp_session_expires_' . $this->session->session_id );
  125. }
  126. /**
  127. * Force the cookie expiration variant time to 23 minutes
  128. *
  129. * @access public
  130. * @since 2.9.18
  131. * @param int $exp Default expiration (1 hour)
  132. * @return int
  133. */
  134. public function set_expiration_variant_time( $exp ) {
  135. return 60 * 23;
  136. }
  137. /**
  138. * Force the cookie expiration time to 24 minutes
  139. *
  140. * @access public
  141. * @since 2.9.18
  142. * @param int $exp Default expiration (1 hour)
  143. * @return int
  144. */
  145. public function set_expiration_time( $exp ) {
  146. return 60 * 24;
  147. }
  148. }