forked from hybridauth/hybridauth
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathSession.php
130 lines (106 loc) · 2.96 KB
/
Session.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
<?php
/*!
* Hybridauth
* https://hybridauth.github.io | https://github.com/hybridauth/hybridauth
* (c) 2017 Hybridauth authors | https://hybridauth.github.io/license.html
*/
namespace Hybridauth\Storage;
use Hybridauth\Exception\RuntimeException;
/**
* Hybridauth storage manager
*/
class Session implements StorageInterface
{
/**
* Namespace
*
* @var string
*/
protected $storeNamespace = 'HYBRIDAUTH::STORAGE';
/**
* Key prefix
*
* @var string
*/
protected $keyPrefix = '';
/**
* Initiate a new session
*
* @throws RuntimeException
*/
public function __construct()
{
if (session_id()) {
return;
}
if (headers_sent()) {
// phpcs:ignore
throw new RuntimeException('HTTP headers already sent to browser and Hybridauth won\'t be able to start/resume PHP session. To resolve this, session_start() must be called before outputing any data.');
}
if (!session_start()) {
throw new RuntimeException('PHP session failed to start.');
}
}
/**
* {@inheritdoc}
*/
public function get($key)
{
$key = $this->keyPrefix . strtolower($key);
if (isset($_SESSION[$this->storeNamespace], $_SESSION[$this->storeNamespace][$key])) {
$value = $_SESSION[$this->storeNamespace][$key];
if (is_array($value) && array_key_exists('lateObject', $value)) {
$value = unserialize($value['lateObject']);
}
return $value;
}
return null;
}
/**
* {@inheritdoc}
*/
public function set($key, $value)
{
$key = $this->keyPrefix . strtolower($key);
if (is_object($value)) {
// We encapsulate as our classes may be defined after session is initialized.
$value = ['lateObject' => serialize($value)];
}
$_SESSION[$this->storeNamespace][$key] = $value;
}
/**
* {@inheritdoc}
*/
public function clear()
{
$_SESSION[$this->storeNamespace] = [];
}
/**
* {@inheritdoc}
*/
public function delete($key)
{
$key = $this->keyPrefix . strtolower($key);
if (isset($_SESSION[$this->storeNamespace], $_SESSION[$this->storeNamespace][$key])) {
$tmp = $_SESSION[$this->storeNamespace];
unset($tmp[$key]);
$_SESSION[$this->storeNamespace] = $tmp;
}
}
/**
* {@inheritdoc}
*/
public function deleteMatch($key)
{
$key = $this->keyPrefix . strtolower($key);
if (isset($_SESSION[$this->storeNamespace]) && count($_SESSION[$this->storeNamespace])) {
$tmp = $_SESSION[$this->storeNamespace];
foreach ($tmp as $k => $v) {
if (strstr($k, $key)) {
unset($tmp[$k]);
}
}
$_SESSION[$this->storeNamespace] = $tmp;
}
}
}