19 declare(strict_types=1);
50 public static function _getData(
string $a_session_id): string
60 $q =
'SELECT data FROM usr_session WHERE session_id = ' .
61 $ilDB->quote($a_session_id,
'text');
63 $rec =
$ilDB->fetchAssoc($set);
64 if (!is_array($rec)) {
69 return (
string) $rec[
'data'];
83 $query =
'SELECT expires FROM usr_session WHERE session_id = ' .
84 $ilDB->quote($a_session_id,
'text');
87 return (
int) $row->expires;
92 public static function _writeData(
string $a_session_id,
string $a_data):
bool 99 $ilClientIniFile = $DIC[
'ilClientIniFile'];
101 if (self::isWebAccessWithoutSessionEnabled()) {
108 if (!$a_session_id) {
122 if ($ilClientIniFile->readVariable(
'session',
'save_ip')) {
126 if (self::_exists($a_session_id)) {
143 if (class_exists(
'ilContext')) {
147 $insert_fields = implode(
', ', array_keys($fields));
148 $insert_values = implode(
151 static fn(
string $type, $value):
string =>
$ilDB->quote($value, $type),
152 array_column($fields, 0),
153 array_column($fields, 1)
157 $update_fields = array_filter(
159 static fn(
string $field):
bool => !in_array($field, [
'session_id',
'user_id',
'createtime'],
true),
162 $update_values = implode(
165 static fn(
string $field,
string $type, $value):
string => $field .
' = ' .
$ilDB->quote(
169 array_keys($update_fields),
170 array_column($update_fields, 0),
171 array_column($update_fields, 1)
176 'INSERT INTO usr_session (' . $insert_fields .
') ' 177 .
'VALUES (' . $insert_values .
') ' 178 .
'ON DUPLICATE KEY UPDATE ' . $update_values
182 $type = (
int) $fields[
'type'][1];
185 $fields[
'session_id'][1],
187 $fields[
'createtime'][1],
188 $fields[
'user_id'][1]
193 if (!$DIC->cron()->manager()->isJobActive(
'auth_destroy_expired_sessions')) {
194 $r = new \Random\Randomizer();
195 if (
$r->getInt(0, 50) === 2) {
197 self::_destroyExpiredSessions();
205 public static function _exists(
string $a_session_id): bool
207 if (!$a_session_id) {
212 $ilDB = $DIC[
'ilDB'];
214 $q =
'SELECT 1 FROM usr_session WHERE session_id = ' .
$ilDB->quote($a_session_id,
'text');
217 return $ilDB->numRows($set) > 0;
227 public static function _destroy($a_session_id, ?
int $a_closing_context =
null, $a_expired_at =
null): bool
231 $ilDB = $DIC[
'ilDB'];
233 if (!$a_closing_context) {
234 $a_closing_context = self::$closing_context;
239 if (is_array($a_session_id)) {
242 $a_session_id = array_keys($a_session_id);
244 $q =
'DELETE FROM usr_session WHERE ' .
245 $ilDB->in(
'session_id', $a_session_id,
false,
'text');
247 $q =
'DELETE FROM usr_session WHERE session_id = ' .
248 $ilDB->quote($a_session_id,
'text');
258 if ($DIC->http()->wrapper()->cookie()->has(session_name()) &&
259 $DIC->http()->wrapper()->cookie()->retrieve(
261 $DIC->refinery()->kindlyTo()->string()
262 ) === $a_session_id) {
263 $cookieJar = $DIC->http()->cookieJar()->without(session_name());
264 $cookieJar->renderIntoResponseHeader($DIC->http()->response());
284 $ilDB = $DIC[
'ilDB'];
286 $q =
'DELETE FROM usr_session WHERE user_id = ' .
287 $ilDB->quote($a_user_id,
'integer');
301 $ilDB = $DIC[
'ilDB'];
307 $ids[$row[
'session_id']] = (
int) $row[
'expires'];
310 self::_destroy($ids, self::SESSION_CLOSE_EXPIRE,
true);
322 public static function _duplicate(
string $a_session_id): string
326 $ilDB = $DIC[
'ilDB'];
329 $new_session = $a_session_id;
331 $new_session = md5($new_session);
332 $q =
'SELECT * FROM usr_session WHERE ' .
333 'session_id = ' .
$ilDB->quote($new_session,
'text');
337 $query =
'SELECT * FROM usr_session ' .
338 'WHERE session_id = ' .
$ilDB->quote($a_session_id,
'text');
342 self::_writeData($new_session, $row->data);
354 return time() + self::getIdleValue();
364 $ilClientIniFile = $DIC[
'ilClientIniFile'];
366 return (
int) $ilClientIniFile->readVariable(
'session',
'expire');
374 return self::getIdleValue();
380 public static function set(
string $a_var, $a_val):
void 382 $_SESSION[$a_var] = $a_val;
388 public static function get(
string $a_var)
390 return $_SESSION[$a_var] ??
null;
393 public static function has($a_var): bool
395 return isset($_SESSION[$a_var]);
398 public static function clear(
string $a_var): void
400 if (isset($_SESSION[$a_var])) {
401 unset($_SESSION[$a_var]);
407 return print_r($_SESSION,
true);
415 self::$closing_context = $a_context;
423 return self::$closing_context;
428 return self::$enable_web_access_without_session;
static enableWebAccessWithoutSession(bool $enable_web_access_without_session)
static _duplicate(string $a_session_id)
Duplicate session.
const int SESSION_CLOSE_INACTIVE
const int SESSION_CLOSE_TIME
static _destroyByUserId(int $a_user_id)
Destroy session.
static createRawEntry(string $a_session_id, int $a_session_type, int $a_timestamp, int $a_user_id)
Create raw data entry.
static _getData(string $a_session_id)
Get session data from table.
const int SESSION_CLOSE_LOGIN
static usesHTTP()
Uses HTTP aka browser.
static _exists(string $a_session_id)
static bool $enable_web_access_without_session
static isSessionMainContext()
Context that are not only temporary in a session (e.g.
static lookupExpireTime(string $a_session_id)
Lookup expire time for a specific session.
static getIdleValue()
Returns the idle time in seconds.
static getExpireValue()
Returns the expiration timestamp in seconds.
static _destroyExpiredSessions()
Destroy expired sessions.
static aggretateRaw(int $a_now)
Aggregate raw session data (older than given time)
const int SESSION_CLOSE_SIMUL
const int SESSION_CLOSE_PUBLIC
while($session_entry=$r->fetchRow(ilDBConstants::FETCHMODE_ASSOC)) return null
const int SESSION_CLOSE_USER
static closeRawEntry($a_session_id, ?int $a_context=null, $a_expired_at=null)
Close raw data entry.
static destroySession($a_session_id)
Destroy session(s).
static isWebAccessWithoutSessionEnabled()
const int SESSION_CLOSE_IP
static _destroy($a_session_id, ?int $a_closing_context=null, $a_expired_at=null)
Destroy session.
static array $session_types_controlled
const int SESSION_CLOSE_EXPIRE
static setClosingContext(int $a_context)
set closing context (for statistics)
static getType()
Get context type.
static getClosingContext()
get closing context (for statistics)
static getSessionExpireValue()
Returns the session expiration value.
static clear(string $a_var)
static int $closing_context