note 15642 added to function.session-encode

From: 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>&nbsp;</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

« previous php.notes (#18254) next »