PluginProbe ʕ •ᴥ•ʔ
Paid Membership Plugin, Ecommerce, User Registration Form, Login Form, User Profile & Restrict Content – ProfilePress / trunk
Paid Membership Plugin, Ecommerce, User Registration Form, Login Form, User Profile & Restrict Content – ProfilePress vtrunk
4.16.18 4.16.17 4.16.16 trunk 1.0 1.0.1 1.0.2 1.1 1.1.1 1.1.2 1.1.3 1.1.4 1.1.5 1.1.5a 1.1.6 1.1.7 1.2 1.2.1 1.2.2 1.2.3 1.2.4 1.2.5 1.2.6 1.3 1.3.1 1.3.2 1.3.3 1.3.4 1.3.5 1.3.6 1.4 1.4.1 1.4.2 1.5 1.5.1 1.5.2 1.5.3 1.5.4 1.5.5 1.5.6 1.5.7 1.5.8 1.6 1.6.1 1.6.2 1.6.3 1.6.4 1.6.5 1.6.6 1.6.7 1.6.8 1.7 1.7.1 1.7.2 1.8 1.8.1 1.8.10 1.8.2 1.8.3 1.8.4 1.8.5 1.8.6 1.8.7 1.8.8 1.8.9 1.9 1.9.1 1.9.10 1.9.11 1.9.12 1.9.13 1.9.2 1.9.3 1.9.4 1.9.5 1.9.6 1.9.7 1.9.8 1.9.9 2.1.9 2.2.10 2.2.11 2.2.12 2.2.13 2.2.14 2.2.15 2.2.16 2.2.2 2.2.5 2.2.6 2.2.7 2.2.8 2.2.9 3.0 3.1 3.1.1 3.1.10 3.1.11 3.1.12 3.1.13 3.1.14 3.1.15 3.1.16 3.1.17 3.1.18 3.1.19 3.1.2 3.1.3 3.1.4 3.1.5 3.1.6 3.1.7 3.1.8 3.1.9 3.2.0 3.2.1 3.2.10 3.2.11 3.2.12 3.2.13 3.2.14 3.2.15 3.2.16 3.2.2 3.2.3 3.2.4 3.2.5 3.2.6 3.2.7 3.2.8 3.2.9 4.0.0 4.0.1 4.0.2 4.0.3 4.1.0 4.1.1 4.1.2 4.1.3 4.1.4 4.10.0 4.10.1 4.10.2 4.10.3 4.11.0 4.12.0 4.13.0 4.13.1 4.13.2 4.13.3 4.13.4 4.14.0 4.14.1 4.14.2 4.14.3 4.14.4 4.15.0 4.15.1 4.15.10 4.15.11 4.15.12 4.15.13 4.15.14 4.15.15 4.15.16 4.15.17 4.15.18 4.15.19 4.15.2 4.15.20 4.15.20.1 4.15.21 4.15.22 4.15.23 4.15.24 4.15.25 4.15.3 4.15.4 4.15.5 4.15.6 4.15.7 4.15.8 4.15.9 4.16.0 4.16.1 4.16.10 4.16.11 4.16.12 4.16.13 4.16.14 4.16.15 4.16.2 4.16.3 4.16.4 4.16.5 4.16.6 4.16.7 4.16.8 4.16.9 4.2.0 4.3.0 4.3.1 4.3.2 4.4.0 4.4.1 4.5.0 4.5.1 4.5.2 4.5.3 4.5.4 4.5.5 4.6.0 4.7.0 4.8.0 4.9.0
wp-user-avatar / src / Classes / PPRESS_Session.php
wp-user-avatar / src / Classes Last commit date
Installer 3 years ago AdminNotices.php 2 months ago AjaxHandler.php 1 year ago Autologin.php 9 months ago BlockRegistrations.php 10 months ago BuddyPressBbPress.php 3 years ago DisableConcurrentLogins.php 2 years ago EditUserProfile.php 5 months ago ExtensionManager.php 1 month ago FileUploader.php 3 months ago FormPreviewHandler.php 5 months ago FormRepository.php 1 year ago FormShortcodeDefaults.php 1 month ago GDPR.php 3 years ago Geolocation.php 3 years ago GlobalSiteAccess.php 3 years ago ImageUploader.php 1 year ago LoginAuth.php 1 year ago Miscellaneous.php 3 years ago ModifyRedirectDefaultLinks.php 1 hour ago PPRESS_Session.php 1 year ago PROFILEPRESS_sql.php 1 year ago PasswordReset.php 1 year ago ProfileUrlRewrite.php 4 years ago RegistrationAuth.php 1 week ago SendEmail.php 3 years ago ShortcodeThemeFactory.php 5 years ago UserAvatar.php 1 year ago UserSignupLocationListingPage.php 3 years ago UsernameEmailRestrictLogin.php 4 years ago WPProfileFieldParserTrait.php 1 year ago WelcomeEmailAfterSignup.php 1 year ago default-email-template.php 1 year ago index.php 3 years ago
PPRESS_Session.php
241 lines
1 <?php
2
3 namespace ProfilePress\Core\Classes;
4
5 use WP_PPress_Session;
6
7 /**
8 * This is a wrapper class for WP_PPress_Session / PHP $_SESSION
9 *
10 * @copyright Copyright (c) 2015, Pippin Williamson
11 * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License
12 */
13 class PPRESS_Session
14 {
15 /**
16 * Holds our session data
17 *
18 * @var array
19 *
20 */
21 private $session;
22
23 /**
24 * Get things started
25 *
26 * Defines our WP_PPress_Session constants, includes the necessary libraries and
27 * retrieves the WP Session instance
28 */
29 public function __construct()
30 {
31 if ( ! $this->should_start_session()) {
32 return;
33 }
34
35 if ( ! defined('WP_PPRESS_SESSION_COOKIE')) {
36 define('WP_PPRESS_SESSION_COOKIE', $this->get_session_cookie_name());
37 }
38
39 if ( ! class_exists('PPRESS_Recursive_ArrayAccess')) {
40 require_once PROFILEPRESS_SRC . 'lib/wp_session/class-recursive-arrayaccess.php';
41 }
42
43 // Include utilities class
44 if ( ! class_exists('WP_PPress_Session_Utils')) {
45 require_once PROFILEPRESS_SRC . 'lib/wp_session/class-wp-session-utils.php';
46 }
47
48 if ( ! class_exists('WP_PPress_Session')) {
49 require_once PROFILEPRESS_SRC . 'lib/wp_session/class-wp-session.php';
50 require_once PROFILEPRESS_SRC . 'lib/wp_session/wp-session.php';
51 }
52
53 $hook = (empty($this->session)) ? 'plugins_loaded' : 'init';
54
55 add_action($hook, [$this, 'init'], -1);
56 }
57
58 public function get_session_cookie_name()
59 {
60 $name = 'ppwp_wp_session';
61
62 /** @see https://docs.pantheon.io/cookies#cache-busting-cookies */
63 if ( ! empty($_ENV['PANTHEON_ENVIRONMENT'])) $name = 'wp-' . $name;
64
65 /** @see https://wpengine.com/support/cache/#Default_Cache_Exclusions */
66 if (function_exists('is_wpe') && is_wpe()) $name = 'wordpress_' . $name;
67
68 return $name;
69 }
70
71 /**
72 * Setup the WP_PPress_Session instance
73 *
74 * @return mixed
75 */
76 public function init()
77 {
78 $this->session = WP_PPress_Session::get_instance();
79
80 return $this->session;
81 }
82
83 public function get_all()
84 {
85 return $this->session->toArray();
86 }
87
88 /**
89 * Retrieve a session variable
90 *
91 * @param string $key Session key
92 *
93 * @return mixed Session variable
94 */
95 public function get($key)
96 {
97 $key = sanitize_key($key);
98 $return = false;
99
100 if (isset($this->session[$key]) && ! empty($this->session[$key])) {
101
102 preg_match('/[oO]\s*:\s*\d+\s*:\s*"\s*(?!(?i)(stdClass))/', $this->session[$key], $matches);
103 if ( ! empty($matches)) {
104 $this->set($key, null);
105
106 return false;
107 }
108
109 if (is_numeric($this->session[$key])) {
110 $return = $this->session[$key];
111 } else {
112
113 $maybe_json = json_decode($this->session[$key]);
114
115 // Since json_last_error is PHP 5.3+, we have to rely on a `null` value for failing to parse JSON.
116 if (is_null($maybe_json)) {
117 $is_serialized = is_serialized($this->session[$key]);
118 if ($is_serialized) {
119 $value = @unserialize($this->session[$key]);
120 $this->set($key, (array)$value);
121 $return = $value;
122 } else {
123 $return = $this->session[$key];
124 }
125 } else {
126 $return = json_decode($this->session[$key], true);
127 }
128 }
129 }
130
131 return $return;
132 }
133
134 /**
135 * Set a session variable
136 *
137 * @param string $key Session key
138 * @param int|string|array $value Session variable
139 *
140 * @return mixed Session variable
141 */
142 public function set($key, $value)
143 {
144 $key = sanitize_key($key);
145
146 if (is_array($value)) {
147 $this->session[$key] = wp_json_encode($value);
148 } else {
149 $this->session[$key] = esc_attr($value);
150 }
151
152 return $this->session[$key];
153 }
154
155 /**
156 * Determines if we should start sessions
157 *
158 * @return bool
159 */
160 public function should_start_session()
161 {
162 $start_session = true;
163
164 if ( ! empty($_SERVER['REQUEST_URI'])) {
165
166 $blacklist = $this->get_blacklist();
167 $uri = ltrim($_SERVER['REQUEST_URI'], '/');
168 $uri = untrailingslashit($uri);
169
170 if (in_array($uri, $blacklist)) {
171 $start_session = false;
172 }
173
174 if (false !== strpos($uri, 'feed=')) {
175 $start_session = false;
176 }
177
178 if (is_admin() && false === strpos($uri, 'wp-admin/admin-ajax.php')) {
179 // We do not want to start sessions in the admin unless we're processing an ajax request
180 $start_session = false;
181 }
182
183 if (false !== strpos($uri, 'wp_scrape_key')) {
184 // Starting sessions while saving the file editor can break the save process, so don't start
185 $start_session = false;
186 }
187 }
188
189 if (defined('DOING_CRON') && DOING_CRON) {
190 $start_session = false;
191 }
192
193 if ( ! ppress_is_any_active_plan() && ! ExtensionManager::is_enabled(ExtensionManager::SOCIAL_LOGIN)) {
194 $start_session = false;
195 }
196
197 return apply_filters('ppress_should_start_session', $start_session);
198 }
199
200 /**
201 * Retrieve the URI blacklist
202 *
203 * These are the URIs where we never start sessions
204 *
205 * @return array
206 */
207 public function get_blacklist()
208 {
209 $blacklist = array(
210 'feed',
211 'feed/rss',
212 'feed/rss2',
213 'feed/rdf',
214 'feed/atom',
215 'comments/feed'
216 );
217
218 // Look to see if WordPress is in a sub folder or this is a network site that uses sub folders
219 $folder = str_replace(network_home_url(), '', get_site_url());
220
221 if ( ! empty($folder)) {
222 foreach ($blacklist as $path) {
223 $blacklist[] = $folder . '/' . $path;
224 }
225 }
226
227 return $blacklist;
228 }
229
230 public static function get_instance()
231 {
232 static $instance = null;
233
234 if (is_null($instance)) {
235 $instance = new self();
236 }
237
238 return $instance;
239 }
240 }
241