aboutsummaryrefslogtreecommitdiffstats
path: root/public/system/library/session.php
diff options
context:
space:
mode:
Diffstat (limited to 'public/system/library/session.php')
-rw-r--r--public/system/library/session.php90
1 files changed, 90 insertions, 0 deletions
diff --git a/public/system/library/session.php b/public/system/library/session.php
new file mode 100644
index 0000000..2a8957d
--- /dev/null
+++ b/public/system/library/session.php
@@ -0,0 +1,90 @@
+<?php
+/**
+ * @package OpenCart
+ * @author Daniel Kerr
+ * @copyright Copyright (c) 2005 - 2017, OpenCart, Ltd. (https://www.opencart.com/)
+ * @license https://opensource.org/licenses/GPL-3.0
+ * @link https://www.opencart.com
+*/
+
+/**
+* Session class
+*/
+class Session {
+ protected $adaptor;
+ protected $session_id;
+ public $data = array();
+
+ /**
+ * Constructor
+ *
+ * @param string $adaptor
+ * @param object $registry
+ */
+ public function __construct($adaptor, $registry = '') {
+ $class = 'Session\\' . $adaptor;
+
+ if (class_exists($class)) {
+ if ($registry) {
+ $this->adaptor = new $class($registry);
+ } else {
+ $this->adaptor = new $class();
+ }
+
+ register_shutdown_function(array($this, 'close'));
+ } else {
+ trigger_error('Error: Could not load cache adaptor ' . $adaptor . ' session!');
+ exit();
+ }
+ }
+
+ /**
+ *
+ *
+ * @return string
+ */
+ public function getId() {
+ return $this->session_id;
+ }
+
+ /**
+ *
+ *
+ * @param string $session_id
+ *
+ * @return string
+ */
+ public function start($session_id = '') {
+ if (!$session_id) {
+ if (function_exists('random_bytes')) {
+ $session_id = substr(bin2hex(random_bytes(26)), 0, 26);
+ } else {
+ $session_id = substr(bin2hex(openssl_random_pseudo_bytes(26)), 0, 26);
+ }
+ }
+
+ if (preg_match('/^[a-zA-Z0-9,\-]{22,52}$/', $session_id)) {
+ $this->session_id = $session_id;
+ } else {
+ exit('Error: Invalid session ID!');
+ }
+
+ $this->data = $this->adaptor->read($session_id);
+
+ return $session_id;
+ }
+
+ /**
+ *
+ */
+ public function close() {
+ $this->adaptor->write($this->session_id, $this->data);
+ }
+
+ /**
+ *
+ */
+ public function __destroy() {
+ $this->adaptor->destroy($this->session_id);
+ }
+}