]> git.mxchange.org Git - quix0rs-gnu-social.git/blobdiff - classes/Session.php
change Laconica and Control Yourself to StatusNet in PHP files
[quix0rs-gnu-social.git] / classes / Session.php
old mode 100755 (executable)
new mode 100644 (file)
index 9b48dab..a94a5db
@@ -2,8 +2,8 @@
 /**
  * Table Definition for session
  *
- * Laconica - a distributed open-source microblogging tool
- * Copyright (C) 2009, Control Yourself, Inc.
+ * StatusNet - a 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
@@ -39,4 +39,101 @@ 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 {
+            $session->session_data = $session_data;
+
+            return $session->update();
+        }
+    }
+
+    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;
+    }
 }