X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=classes%2FSession.php;h=79a69a96ea3dc11b1f93672890f1687f2e263fa0;hb=69ac99ff949ab0118ff25a62471980ad0ec7a52b;hp=9b48dabac7bdc28b275b79f739b708712da795e0;hpb=48d671ac39de0ebfd36858d784d3066ecbb89c10;p=quix0rs-gnu-social.git diff --git a/classes/Session.php b/classes/Session.php old mode 100755 new mode 100644 index 9b48dabac7..79a69a96ea --- a/classes/Session.php +++ b/classes/Session.php @@ -2,8 +2,8 @@ /** * Table Definition for session * - * Laconica - a distributed open-source microblogging tool - * Copyright (C) 2009, Control Yourself, Inc. + * StatusNet - the distributed open-source microblogging tool + * Copyright (C) 2009, StatusNet, Inc. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as published by @@ -19,7 +19,7 @@ * along with this program. If not, see . */ -if (!defined('LACONICA')) { exit(1); } +if (!defined('STATUSNET') && !defined('LACONICA')) { exit(1); } require_once INSTALLDIR.'/classes/Memcached_DataObject.php'; @@ -39,4 +39,110 @@ class Session extends Memcached_DataObject /* the code above is auto generated do not remove the tag below */ ###END_AUTOCODE + + static function logdeb($msg) + { + if (common_config('sessions', 'debug')) { + common_debug("Session: " . $msg); + } + } + + static function open($save_path, $session_name) + { + return true; + } + + static function close() + { + return true; + } + + static function read($id) + { + self::logdeb("Fetching session '$id'"); + + $session = Session::staticGet('id', $id); + + if (empty($session)) { + return ''; + } else { + return (string)$session->session_data; + } + } + + static function write($id, $session_data) + { + self::logdeb("Writing session '$id'"); + + $session = Session::staticGet('id', $id); + + if (empty($session)) { + $session = new Session(); + + $session->id = $id; + $session->session_data = $session_data; + $session->created = common_sql_now(); + + return $session->insert(); + } else { + if (strcmp($session->session_data, $session_data) == 0) { + self::logdeb("Not writing session '$id'; unchanged"); + return true; + } else { + self::logdeb("Session '$id' data changed; updating"); + + $orig = clone($session); + + $session->session_data = $session_data; + + return $session->update($orig); + } + } + } + + static function destroy($id) + { + self::logdeb("Deleting session $id"); + + $session = Session::staticGet('id', $id); + + if (!empty($session)) { + return $session->delete(); + } + } + + static function gc($maxlifetime) + { + self::logdeb("garbage collection (maxlifetime = $maxlifetime)"); + + $epoch = common_sql_date(time() - $maxlifetime); + + $ids = array(); + + $session = new Session(); + $session->whereAdd('modified < "'.$epoch.'"'); + $session->selectAdd(); + $session->selectAdd('id'); + + $session->find(); + + while ($session->fetch()) { + $ids[] = $session->id; + } + + $session->free(); + + foreach ($ids as $id) { + self::destroy($id); + } + } + + static function setSaveHandler() + { + self::logdeb("setting save handlers"); + $result = session_set_save_handler('Session::open', 'Session::close', 'Session::read', + 'Session::write', 'Session::destroy', 'Session::gc'); + self::logdeb("save handlers result = $result"); + return $result; + } }