session.php 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  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 NF_PLUGIN_DIR . 'includes/libraries/class-recursive-arrayaccess.php';
  51. }
  52. if ( ! class_exists( 'WP_Session' ) ) {
  53. require_once NF_PLUGIN_DIR . 'includes/libraries/class-wp-session.php';
  54. require_once NF_PLUGIN_DIR . 'includes/libraries/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. add_action( 'plugins_loaded', array( $this, 'init' ), -1 );
  59. }
  60. /**
  61. * Setup the WP_Session instance
  62. *
  63. * @access public
  64. * @since 2.9.18
  65. * @return void
  66. */
  67. public function init() {
  68. $this->session = WP_Session::get_instance();
  69. return $this->session;
  70. }
  71. /**
  72. * Retrieve session ID
  73. *
  74. * @access public
  75. * @since 2.9.18
  76. * @return string Session ID
  77. */
  78. public function get_id() {
  79. return $this->session->session_id;
  80. }
  81. /**
  82. * Retrieve a session variable
  83. *
  84. * @access public
  85. * @since 2.9.18
  86. * @param string $key Session key
  87. * @return string Session variable
  88. */
  89. public function get( $key ) {
  90. $key = sanitize_key( $key );
  91. return isset( $this->session[ $key ] ) ? maybe_unserialize( $this->session[ $key ] ) : false;
  92. }
  93. /**
  94. * Set a session variable
  95. *
  96. * @since 2.9.18
  97. * @param string $key Session key
  98. * @param integer $value Session variable
  99. * @return string Session variable
  100. */
  101. public function set( $key, $value ) {
  102. $key = sanitize_key( $key );
  103. if ( is_array( $value ) ) {
  104. $this->session[ $key ] = serialize( $value );
  105. } else {
  106. $this->session[ $key ] = $value;
  107. }
  108. return $this->session[ $key ];
  109. }
  110. /**
  111. * Delete a session variable
  112. *
  113. * @since 2.9.28
  114. * @param string $key
  115. * @return void
  116. */
  117. public function delete() {
  118. delete_option( '_wp_session_' . $this->session->session_id );
  119. delete_option( '_wp_session_expires_' . $this->session->session_id );
  120. }
  121. /**
  122. * Force the cookie expiration variant time to 23 minutes
  123. *
  124. * @access public
  125. * @since 2.9.18
  126. * @param int $exp Default expiration (1 hour)
  127. * @return int
  128. */
  129. public function set_expiration_variant_time( $exp ) {
  130. return 60 * 23;
  131. }
  132. /**
  133. * Force the cookie expiration time to 24 minutes
  134. *
  135. * @access public
  136. * @since 2.9.18
  137. * @param int $exp Default expiration (1 hour)
  138. * @return int
  139. */
  140. public function set_expiration_time( $exp ) {
  141. return 60 * 24;
  142. }
  143. }