note 15642 added to function.session-encode
| From: | shandy at NOSPAMgeeky dot net | Date: | Mon, 24 Sep 2001 20:26:55 +0000 |
| Subject: | note 15642 added to function.session-encode | ||
| Groups: | php.notes | ||
| Request: | Send a blank email to php-notes+get-18254@lists.php.net to get a copy of this message | ||
If your sessions are complicated, with objects and arrays and whatnot, this will probably not be
adequate for debugging. I've written some code to print out session info in a more readable
manner. I put this code in my footer include file.
Change the [br]s to html brs.
<br><br>function PrettyIndentStart()
{ echo '<table border=1><tr><td> </td><td>'; }
function PrettyIndentEnd()
{ echo '</td></tr></table>'; }
function ToggleIt( &$nameval )
{
if( $nameval ) { $nameval = 0; }
else { $nameval = 1; }
}
//basically a State Machine...
function SessionPrettyPrint()
{
$sessStr = session_encode();
$state = "PreName";
$done = false;
$stateStack = array();
$depth = 0;
$nameval = 0;
for(;;)
{
switch ($state)
{
case "PreName":
$splitArr = split( "\|", $sessStr, 2 );
$varName = $splitArr[0];
$sessStr = $splitArr[1];
echo "varname: $varName[br]";
$state = "PreType";
ToggleIt( $nameval );
break;
case "PreType":
$splitArr = split( ":", $sessStr, 2 );
$typeName = $splitArr[0];
$sessStr = $splitArr[1];
//echo "type: $typeName[br]";
if( $typeName == "O" )
{ $state = "PreObj"; }
elseif( $typeName == "s" )
{ $state = "PreStr"; }
elseif( $typeName == "i" || $typeName == "b" )
{ $state = "PreInt"; }
elseif( $typeName == "a" )
{ $state = "PreArr"; }
break;
case "PreStr":
$splitArr = split( ":", $sessStr, 2 );
$len = $splitArr[0];
$sessStr = $splitArr[1];
$splitArr = split( ";", $sessStr, 2 );
$val = $splitArr[0];
$sessStr = $splitArr[1];
echo $val;
if( $depth > 0 )
{
if( $nameval )
{ echo "[br]"; }
else
{ echo " = "; }
}
ToggleIt( $nameval );
$state = "MaybeDone";
break;
case "PreInt":
$splitArr = split( ";", $sessStr, 2 );
$val = $splitArr[0];
$sessStr = $splitArr[1];
echo $val;
if( $depth > 0 )
{
if( $nameval )
{ echo "[br]"; }
else
{ echo " = "; }
}
$state = "MaybeDone";
ToggleIt( $nameval );
break;
case "PreArr":
$splitArr = split( "\{", $sessStr, 2 );
$len = $splitArr[0];
$sessStr = $splitArr[1];
echo "arr($len)[br]";
PrettyIndentStart();
$depth++;
$state = "MaybeDone";
ToggleIt( $nameval );
break;
case "PreObj":
$splitArr = split( ":", $sessStr, 2 );
$len = $splitArr[0];
$sessStr = $splitArr[1];
$splitArr = split( ":", $sessStr, 2 );
$nam = $splitArr[0];
$sessStr = $splitArr[1];
$splitArr = split( "\{", $sessStr, 2 );
$num = $splitArr[0];
$sessStr = $splitArr[1];
echo "obj($len,$num) <b>$nam</b>[br]";
PrettyIndentStart();
$depth++;
$state = "PreType";
ToggleIt( $nameval );
break;
case "MaybeDone":
$nextchar = $sessStr{0};
if( $nextchar == "}" )
{
//just finished an array or obj
$splitArr = split( "\}", $sessStr, 2 );
$sessStr = $splitArr[1];
PrettyIndentEnd();
$state = "MaybeDone";
$depth--;
if( $depth == 0 )
{$state = "PreName"; }
}
else
{ $state = "PreType"; }
break;
}
if( empty( $sessStr) )
{ $done = true; }
if( $done ) {break;}
}
}
--
http://www.php.net/manual/en/function.session-encode.php
http://master.php.net/manage/user-notes.php?action=edit+15642
http://master.php.net/manage/user-notes.php?action=delete+15642
http://master.php.net/manage/user-notes.php?action=reject+15642