diff options
Diffstat (limited to 'classes/session/SessionHandlerInterface.php')
| -rw-r--r-- | classes/session/SessionHandlerInterface.php | 169 |
1 files changed, 0 insertions, 169 deletions
diff --git a/classes/session/SessionHandlerInterface.php b/classes/session/SessionHandlerInterface.php deleted file mode 100644 index cf6efac..0000000 --- a/classes/session/SessionHandlerInterface.php +++ /dev/null @@ -1,169 +0,0 @@ -<?php - -/** SessionHandlerInterface - * - * as of php's documentation (check manual) - * https://www.php.net/manual/en/class.sessionhandlerinterface.php - */ -interface SessionHandlerInterface -{ - - /* Methods - *-------------------------------------------------------------------------- - */ - - public function open(string $path, string $name) : bool; - - public function close() : bool; - - public function read(string $id) : string|false; - - public function write(string $id, string $data) : bool; - - public function destroy(string $id) : bool; - - public function gc(int $max_lifetime) : int|false; - -} - -/** TODO: (thoughts) - * ... for a brand-new session implementation - * - * In most cases, the session data does not require persistence. - * The session information could be cached to improve performance - * - * So (in theory) we could create a two-dimension session mechanism - * - * + a fast dimension - * : could be file-based (using local FS [php's default?] or redis/memcached) - * - * + a shared dimension - * : implemented in a shared database - * - * Posible algo: - * ... (check later on this comment-block: session life-cycle ) - * - * open : - * close : on both - * read : check Local; if not exist check database; set session_id($id) - * write : on both - * destroy : on both - * gc : on server - * - * when regenerating session_id, keep database informed about the new session_id - * when closing, keep database informed about the session end-of-life. - * - * a session timeout on the local leg will trigger a confirm-session-from-db - * - * garbage collector on the db should remove expired sessions of some X seconds - * and earier (X needs to be determined by practice/expirience/tries) - * - * (+) in order to keep tracking of the session between multiple servers through - * the (shared) database, a unique secret-between-the-servers id can be used - * - * so... - * - * #1 - * -> someone visits website through server A - * -> server A creates a new session-id for the visitor and a shared-session-id - * -> saves both into database - * - * later... - * - * #2 - * -> the same device is connected (via loadbalancer) into server B - * -> server B don't have the session-id (send by the client) but gets it from db - * (is session-id do not exist on the db, then this is a new session) - * - * = now both server A and B have the same session-id localy - * - * later... - * - * #3 - * -> some server (let's say B) regenerates the visitors session-id - * -> if later the visitor falls into server A, the A will retrieve the new - * session id through the #2 scenario - * - * this way - * + any server can update/regenerate the visitor's session-id - * + the visitor can be served from both servers randomly - * + all session variables exist on the database (always) - * + all session variables exist on all servers synced-on-demand - * - * - * stucture of session: - * --- - * - shared-session-id: (secret + persistent); exposed between servers **primary - * - session-id: (may change/regenerate/update); exposed to the client **indexed - * - data: serialized array - * - creation_timestamp: - * - last_touched_timestamp: - * - expiration_timestamp: should point to the future or session has expired - * - csrf_token: - * - JWT_token - * - AES-key (this way private data can be kept in browser) - * - * - * what will kept on browser/client (via cookie) - * --- - * - session-name => session-id - * - user info => AES_ectypted(serialized[t=>csfr_token, u=> user_id, s=>SIGNATURE]) - * - * - * Writable file-system shall change - * (local writable file-system tree) - * --- - * /html/storage - * | - * |-- cache : query-caches - * | - * `-- session : FS\sessions - * | - * `-- indexes : share-session-id indexes - * - * - * - * NOTE: Session life-cycle - * - * session_start() * firsts time - * --- - * ::open(path,PHPSESSID) -> (session_id not exist) -> false - * ::create_sid -> '123def' - * ::read('123def') ?-or/and- ::close() - * - * - * session_start() * next times - * --- - * ::open(path, PHPSESSID) -> (session_id exist) -> true - * ::read('123def') -> return data -> will fill $_SESSION[*] - * - * - * $_SESSION['foo'] = 'bar'; - * --- - * ::write('123def', 'foo|s:3:"bar";') -> ['foo' => "bar"] - * ::close() - * - * - * session_regenerate_id(); - * --- - * ::create_sid() -> def123 - * - * - * session_reset() - * --- - * ::open() - * ::read('def123') - * - * - * session_write_close() - * --- - * ::write('123def', 'foo|s:3:"bar";') - * ::close() - * - * - * session_destroy() - * --- - * ::destroy('def123') - * ::close() - * - */ |
