PX : code

Session-Management by Wild Karlheinz
Download this code


<?php
# -------------------------------------------------------------------
# Session Management v1.0 21.6.1998
# (c) Wild Karl Heinz <kh.wild@wicom.at>
#
# This Include handle Session based variable handling
#
# Please feel free and use it. If you make it more functional
# it would be nice to send me a copy.
#
# Don't forget - Mysql_connect !
#
# The database structure
# Table structure for table 'session'
#
#  CREATE TABLE session (
#    id int(11) DEFAULT '0' NOT NULL auto_increment,
#    sid varchar(20) DEFAULT '' NOT NULL,
#    val blob,
#    times timestamp(14),
#    PRIMARY KEY (id),
#    KEY sid (sid),
#    UNIQUE sid_2 (sid)
#  );
#
# You'll miss here a cron job to delete the old sessions from db
# -------------------------------------------------------------------

   
$sess_db 'test';
   
$sess_table 'session';

# ----------------------------------------------------
# Session_CheckID - Get or Set the Session-ID
# Parameter.: time how long the cookie will keept
#             or null if it's only a session cookie
# Return....: Session-Unique ID
# ----------------------------------------------------
function Session_CheckID$min )
{
   global 
$sess_sid;

   if( !
$sess_sid ) {
      
$sess_sid uniqidSC );
      if( 
$min ) {
         
SetCookie("sess_sid"$sess_sidtime()+($min*60), "/""");
         }
      else {
         
SetCookie("sess_sid"$sess_sid"""/""");
         }
      return( 
false );
      }
   else {
      return( 
$true );
      }
}

# ----------------------------------------------------------
# str2arr - build out from a string with eval the new array
# parameter.: string
# returns...: global array
# ----------------------------------------------------------
function str2arr$ts )
{
   global 
$session;

   
$vals split"&"$ts );
   while( list(
$key,$val) = each($vals) ) {
      list( 
$name$wert ) = split"="$val );
      if( 
$val ) eval( "\$$name = \"$wert\";" );
      }
}

# ----------------------------------------------------------
# session_read - reads the session-variables
# Parameter.: none
# returns...: read - ok = true
# ----------------------------------------------------------
function session_read()
{
   
# Hash array to keep session-variables
   
global $session;

   global 
$sess_sid$sess_db$sess_table$sess_error;


   
$sel "Select val from $sess_table where sid = '$sess_sid'";
   
$res mysql_db_query$sess_db$sel );
   if( 
mysql_numrows$res ) ) {
      
$val mysql_result$res0"val" );
      
str2arr$val );
      
mysql_free_result$res );
      return( 
true );
      }
   else {
      return( 
false );
      
$sess_error mysql_error();
      }
}

# ------------------------------------------------------
# Split_Array - reads the session-array into a string
# Parameter.: array
# returns...: string with & separeted array fields
#
# Thanks to Rasmus
# ------------------------------------------------------
function Split_Array$arr$a ""$b ""$c "" )
{
   while( list( 
$key$val ) = each$arr ) ) {
      if( 
is_array$val ) ) {
         
$ts .= Split_Array$arr$key ],
                  ( 
strlen$a ) ? $a $key ),
                  ( 
strlen$b ) ? $b : ( strlen$a ) ? $key "" ) ),
                  ( 
strlen$c ) ? $c : ( strlen$b ) ? $key "" ) ) );
         }
      else {
         
$ts .= "session";
         
$ts .= $a "[$a]" "";
         
$ts .= $b "[$b]" "";
         
$ts .= $c "[$c]" "";
         
$ts .= "[$key]=$val&";
         }
      }
   return( 
$ts );
}

# ---------------------------------------------------
# session_write - writes the session-variable from
#                 the array session
# parameter.: none
# returns...: write - ok = true
# ---------------------------------------------------
function session_write()
{
   
# Hash array to keep session-variables
   
global $session;

   global 
$sess_sid$sess_db$sess_table;
   global 
$sess_error;

   
# if you like to delete a session-cookie
   # you must check it before writting the session
   # array

   
if( !$sess_sid ) { session_checkid); }

   
$ts Split_Array$session );
   if( 
$ts "" ) { $ts substr$ts0strlen$ts ) - ); }
   
$sel "Select * from session where sid = '$sess_s'";
   
$res mysql_db_query$sess_db$sel );
   if( 
mysql_numrows$res ) == ) {
      
$sel  "Insert into $sess_table ( id, sid, val, times ) ";
      
$sel .= "values( 0, '$sess_sid', '$ts', NULL )";
      }
   else {
      
$sel  "Update $sess_table set val = '$ts', ";
      
$sel .= "times = NULL where sid = '$sess_sid'";
      }
   if( !
mysql_db_query$sess_db$sel ) ) {
      
$sess_error mysql_error();
      return( 
false );
      }
   else { return( 
true ); }
}

# ---------------------------------------------
# session_del - clears an entry
# parameter.: hash - id
# returns...: none
# ---------------------------------------------
function session_del()
{
   global 
$session$sess_db$sess_table$sess_sid;

   
$sel "Delete from $sess_table where sid = '$sess_sid'";
   if( !
mysql_db_query$sess_db$sel ) ) {
      
$sess_error mysql_error();
      }
   
$sess_sid '';
}

?>

[------------------ This is an example ------------------]

<?php
   
require( "session.inc" );

   if( 
$del ) {
      
session_del();
      }

   
session_checkid);

   
mysql_connect('') or Die("can't connect to db!");

   
# Normal use ist to read the session-var and assign it to the
   # working vars. This example assign after session-read fail the
   # new values.
   
if( session_read() ) {
      
$hallo $session[hallo];
      
$w12 $session[w12];
      
$arr $session[arr];
      }
   else {
      for( 
$i 1$i <= 10$i++ ) {
         for( 
$j 1$j <= 2$j++ ) {
            
$arr[$i][$j] = $i+$j;
            }
         }

      
$w12 '10232';
      
$hallo 'Ho oh. ';
      }

?>
<html>
<head><title>Session/Cookie-Test 1</title>
</head>

<body>

<h2>This Page should show how to handle the "session.inc" library</h2>

<h3>We will use a mask with a record showing routine</h3>

<?php
   
print "<h4>Show all variables</h4>";
   for( 
$i 1$i <= 10$i++ ) {
      print 
"\$arr: [$i][1-2] = " $arr[$i][1] . " / " $arr[$i][2] . "<br>";
      }
   print 
"<br>";
   print 
"w12: " $w12 "<br>";
   print 
"hallo: " $hallo "<br>";

   
# increment variables
   
for( $i 1$i <= 10$i++ ) {
      for( 
$j 1$j <= 2$j++ ) {
         
$arr[$i][$j] += 2;
         }
      }

   
$w12++;
   
$hallo .= "w1";

   
# -------------------------------------
   # reassign session variables
   # -------------------------------------
   
$session[arr] = $arr;
   
$session[w12] = $w12;
   
$session[hallo] = $hallo;

   
# -------------------------------------
   # store session variables
   # -------------------------------------
   
if( !session_write() ) {
      print 
$sess_error;
      }

?>

<form action=sess1.php3 method=post>
<hr>
   <input type=submit name=del value=" reset session ">

If you like to reset the session - click

</form>

</body>
</html>


Comments or questions?
PX is running PHP 5.2.17
Thanks to Miranda Productions for hosting and bandwidth.
Use of any code from PX is at your own risk.