JasonWoof Got questions, comments, patches, etc.? Contact Jason Woofenden
added progress-bar uploader.php
[wfpl.git] / session.php
index 41670a6..c61be6f 100644 (file)
 #  along with wfpl; if not, write to the Free Software Foundation, Inc., 51
 #  Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
 
-# you'll need this file that calles db_connect()
-if(!isset($GLOBALS['wfpl_db_handle'])) {
-       require_once('db_connect.php');
-}
 
-# and these database tables:
+# you'll need these database tables:
 # create table wfpl_sessions (id int unique auto_increment, session_key varchar(16), length int, expires int);
 # create table wfpl_session_data (id int unique auto_increment, session_id int, name varchar(100), value text);
+# run this command to install/clear the tables:
+#   mysql DATABASE_NAME < code/wfpl/examples/session.sql
+# note: you may need these parameters for mysql:  -u USERNAME -p
 
 # GLOSSARY
 #
@@ -39,7 +38,7 @@ if(!isset($GLOBALS['wfpl_db_handle'])) {
 
 # generate a new random 16-character string
 function session_generate_key() {
-       $character_set = "abcdefghijklmnopqrstuvwqyzABCDEFGHIJKLMNOPQRSTUVWQYZ0123456789";
+       $character_set = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
     $id = "                ";
 
        # PHP 4.2.0 and up seed the random number generator for you.
@@ -62,10 +61,11 @@ function session_new($length = 86400) {
        $GLOBALS['session_key'] = $session_key;
        $_REQUEST['session_key'] = $session_key; #just in case someone calls session_exists() after session_new()
        session_touch($length);
+       return $GLOBALS['session_key'];
 }
 
 # call to renew the timeout for the session.
-# assumes there's a session. call session_init() if you'd like one auto-create one if not found.
+# assumes there's a session. call init_session() if you'd like one auto-create one if not found.
 function session_touch($length = false) {
        if(!$length) {
                $length = db_get_value('wfpl_sessions', 'length', 'where id=%i', $GLOBALS['session_id']);
@@ -77,15 +77,26 @@ function session_touch($length = false) {
        db_update('wfpl_sessions', 'expires', $expires, 'where id=%i', $GLOBALS['session_id']);
 }
 
+# delete the current session
+function kill_session() {
+       if(!session_exists()) {
+           return;
+       }
+       _kill_session($GLOBALS['session_id']);
+}
+
+# for internal use. use kill_session() above
+function _kill_session($id) {
+       db_delete('wfpl_session_data', 'where session_id=%i', $id);
+       db_delete('wfpl_sessions', 'where id=%i', $id);
+}
+
 # delete expired sessions from database
 function session_purge_old() {
        $now = time();
-       $exired_sessions = db_get_column('wfpl_sessions', 'id', 'where expires < %i', $now);
-       db_delete('wfpl_sessions', 'where expires < %i', $now);
-       if($expired_sessions) {
-               foreach($expired_sessions as $expired_session) {
-                       db_delete('wfpl_session_data', 'where session_id=%i', $expired_session);
-               }
+       $expired_sessions = db_get_column('wfpl_sessions', 'id', 'where expires < %i', $now);
+       if($expired_sessions) foreach($expired_sessions as $expired_session) {
+               _kill_session($expired_session);
        }
 }
 
@@ -95,6 +106,10 @@ function session_exists() {
                return false;
        }
 
+       if(isset($GLOBALS['session_id'])) {
+               return true;
+       }
+
        $session_key = ereg_replace('[^a-zA-Z0-9]', '', $_REQUEST['session_key']);
 
        if(!strlen($session_key) == 16) {
@@ -132,10 +147,15 @@ function init_session() {
 
 # save a variable into the session
 function session_set($name, $value) {
-       db_delete('wfpl_session_data', 'where session_id=%i && name=%"', $GLOBALS['session_id'], $name);
+       session_clear($name);
        db_insert('wfpl_session_data', 'session_id,name,value', $GLOBALS['session_id'], $name, $value);
 }
 
+# remove variable from the session
+function session_clear($name) {
+       db_delete('wfpl_session_data', 'where session_id=%i && name=%"', $GLOBALS['session_id'], $name);
+}
+
 # get a variable into the session
 function session_get($name) {
        return db_get_value('wfpl_session_data', 'value', 'where session_id=%i && name=%"', $GLOBALS['session_id'], $name);