ILIAS  trunk Revision v11.0_alpha-2638-g80c1d007f79
class.ilSessionIStorage.php
Go to the documentation of this file.
1 <?php
2 
19 declare(strict_types=1);
20 
40 {
41  private string $session_id;
42  private string $component_id;
43  private static array $values = [];
44 
45  public function __construct(string $a_component_id, string $a_sess_id = '')
46  {
47  $this->component_id = $a_component_id;
48  if ($a_sess_id !== '') {
49  $this->session_id = $a_sess_id;
50  } else {
51  $this->session_id = session_id();
52  }
53  }
54 
55  private function initComponentCacheIfNotExists(): void
56  {
57  if (!isset(self::$values[$this->component_id]) || !is_array(self::$values[$this->component_id])) {
58  self::$values[$this->component_id] = [];
59  }
60  }
61 
62  public function set(string $a_key, string $a_val): void
63  {
64  global $DIC;
65 
66  $ilDB = $DIC['ilDB'];
67 
69 
70  self::$values[$this->component_id][$a_key] = $a_val;
71  $ilDB->replace(
72  'usr_sess_istorage',
73  [
74  'session_id' => ['text', $this->session_id],
75  'component_id' => ['text', $this->component_id],
76  'vkey' => ['text', $a_key]
77  ],
78  ['value' => ['text', $a_val]]
79  );
80  }
81 
82  public function get(string $a_key): string
83  {
84  global $DIC;
85 
86  $ilDB = $DIC['ilDB'];
87 
88  if (isset(self::$values[$this->component_id][$a_key]) && is_array(self::$values[$this->component_id])) {
89  return self::$values[$this->component_id][$a_key];
90  }
91 
92  $set = $ilDB->query(
93  'SELECT value FROM usr_sess_istorage ' .
94  ' WHERE session_id = ' . $ilDB->quote($this->session_id, 'text') .
95  ' AND component_id = ' . $ilDB->quote($this->component_id, 'text') .
96  ' AND vkey = ' . $ilDB->quote($a_key, 'text')
97  );
98  $rec = $ilDB->fetchAssoc($set);
99  $value = (string) ($rec['value'] ?? '');
100 
102 
103  self::$values[$this->component_id][$a_key] = $value;
104 
105  return $value;
106  }
107 
112  public static function destroySession($a_session_id): void
113  {
114  global $DIC;
115 
116  if (is_array($a_session_id)) {
117  $q = 'DELETE FROM usr_sess_istorage WHERE ' .
118  $DIC->database()->in('session_id', $a_session_id, false, 'text');
119  } else {
120  $q = 'DELETE FROM usr_sess_istorage WHERE session_id = ' .
121  $DIC->database()->quote($a_session_id, 'text');
122  }
123 
124  $DIC->database()->manipulate($q);
125  }
126 }
global $DIC
Definition: shib_login.php:26
static destroySession($a_session_id)
Destroy session(s).
__construct(string $a_component_id, string $a_sess_id='')
$q
Definition: shib_logout.php:23
Session based immediate storage.