php4的session功能评述(二)_php基础

比较模糊的是session_decode和session_encode:  

bool session_decode(string data);  
session_decode() decodes the session data in data, setting variables  
stored in the session.  

bool session_encode(void);  
session_encode() returns a string with the contents of the current  
sessionencoded within.  

php manual里面好象没有相关的例子。从字面意思来看decode是把用户的串  
解析出来以后set到session里面,encode则是把session的数据“打包”返回  
给用户。这样看来encode的作用可能更大一些,用户register数据到session  
里面以后应该是用encode把数据取出来的,但是encode返回的东西仍需要处理,  
比如:  
session_register("val1");  
$val1 = "abcde"  
session_register("val2");  
$val1 = 1234  
session_register("val3");  
$val1 = 123.45  

那么session_encode返回的东西是:  

val1:s:5:"abcde";val2:i:1234;val3:d:123.45;  

很明显,'s'是string,'i'和'd'是数字,'s'类型的变量需要长度。  
如果你的session id是aaeebbcfd4455ec2c0d5cb590f8fab74,那么这串东西实际  
上是存在/tmp/aaeebbcfd4455ec2c0d5cb590f8fab74文件当中。  
现在需要你自己把这串东西做处理,析出你想要的session data。很奇怪php4  
没提供一个方便的接口实现已register变量的解析... 或者有我没找着。  
先自己写一个了...  
session_data_init取出所有“打包”的session_data  
session_data_get根据变量名取得数据  
用:  
$data = session_data_init( );  
$result = session_data_get($data, "val1");  
就可以把val1的数据取出来。  

<?  
/*  
* get all date registered in the session  
*/  
function session_data_init( ) {  
    $sessionData = session_encode();  
    return $sessionData;  
}  
?>  

<?  
/*  
* extract one variable from enconded session data  
*/  
function session_data_get($data, $name) {  
    $matchStr = $name."|";  
    $matchStart = strpos($data, $matchStr);  
    if ($matchStart == 0) {  
        if (strlen($data) < strlen($matchStr)) return "";  
        $tmpStr = substr($data, 0, strlen($matchStr));  
        if (strcmp($tmpStr, $matchStr) != 0) return "";  
    }  

    $typeStart = $matchStart + strlen($matchStr);  
    $dataType = substr($data, $typeStart, 1);  

    if (strcmp($dataType, "s") == 0) {   /* string */  
        $lenStart = $typeStart + 2;  
        $lenEnd = strpos($data, ":", $lenStart) - 1;  
        $lenLen = $lenEnd - $lenStart + 1;  
        $strLen = substr($data, $lenStart, $lenLen);  

        $strStart = $lenEnd + 3;  
        $strResult = substr($data, $strStart, $strLen);  
        return $strResult;  
    } else if (strcmp($dataType, "i") == 0 ||  
        strcmp($dataType, "d") == 0) { /* number */  
        $numStart = $typeStart + 2;  
        $numEnd = strpos($data, ";", $numStart) - 1;  
        $numLen = numEnd - numStart + 1;  
        $numResult = substr($data, $numStart, $numLen);
        return $numResult;
    } else {
        return "";
    }
}
?>                 

时间: 2024-09-20 06:43:43

php4的session功能评述(二)_php基础的相关文章

php4的session功能评述(一)_php基础

php4比php3新加了session的支持.稍微用了一下,对其函数接口,内部机制,  应用的方便性做了大概的了解.  session的意义大家都应该清楚,一个session可以包括数次http的请求和应答,  比如我们用163.net,从login到logout或者超时就作为一个session,session  的唯一标识一般是在系统内部生成一个唯一的session ID,一般是一个挺长的  字符串.一个session除了session ID,还可以有自己的session data,可以  记

php4的session功能评述(三)

总的感觉php的session功能基本上还能用一用,还算方便,省了很多自己处理  cookie的麻烦事情.php的session管理还是基于文件的,默认的是在/tmp目录  下生成一个和session id同名的session文件,在这个文件里保存register的  session data.session有生存期,在/usr/local/lib/php.ini里可以设置.    效率应该算马马虎虎了,毕竟还是要文件操作,虽然是/tmp的.对于服务量很  大的应用会在/tmp里生成很多sess

php4的session功能评述(一)

php4比php3新加了session的支持.稍微用了一下,对其函数接口,内部机制,  应用的方便性做了大概的了解.  session的意义大家都应该清楚,一个session可以包括数次http的请求和应答,  比如我们用163.net,从login到logout或者超时就作为一个session,session  的唯一标识一般是在系统内部生成一个唯一的session ID,一般是一个挺长的  字符串.一个session除了session ID,还可以有自己的session data,可以  记

php4的session功能评述(二)

比较模糊的是session_decode和session_encode:    bool session_decode(string data);  session_decode() decodes the session data in data, setting variables  stored in the session.    bool session_encode(void);  session_encode() returns a string with the contents

定制php4的session功能

  这篇文章描述了怎样定制php4的session处理.我们提供一个怎样写一个全功能的基于mysql数据库或dbm文件的session处理程序例子.      一.序言      新的php4有一套自己的session处理函数.缺省情况下,每个session存贮在系统临时目录的一个个独立文件中(例如在unix系统中为/tmp).   这适合或不适合,依你的需求而言.例如:如果你的支持php的web服务器分布在不同的机器上,你不能很容易地共享它们之间的session(当然,你也可以将session

PHP4的session功能

 这篇文章描述了怎样定制php4的session处理.我们提供一个怎样写一个全功能的基于mysql数据库或dbm文件的session处理程序例子.  一.序言  新的php4有一套自己的session处理函数.缺省情况下,每个session存贮在系统临时目录的一个个独立文件中(例如在unix系统中为/tmp).  这适合或不适合,依你的需求而言.例如:如果你的支持php的web服务器分布在不同的机器上,你不能很容易地共享它们之间的session(当然,你也可以将sessions保存在NFS共享中

PHP4之COOKIE支持详解_php基础

PHP4之COOKIE支持详解      建立商业站点或者功能比较完善的个人站点,常常需要记录访问者的信息,在PHP中提供了两种方便的手段:session和cookie功能.为了永久的保持用户信息,则cookie是最便捷的手段.在这里我将为大家详细的讲解cookie的功能及使用方法.     一: 设置cookie         使用cookie前必须设置cookie.         函数原型:int setcookie(string name,string value,int expire

PHP5中Cookie与 Session使用详解_php基础

1.Cookie和Session简介与区别 在非常多时候,我们需要跟踪浏览者在整个网站的活动,对他们身份进行自动或半自动的识别(也就是平时常说的网站登陆之类的功能),这时候,我们常采用Cookie与 Session来跟踪和判断. 区别 Session信息是存放在server端,但session id是存放在client cookie的,当然php的session存放方法是多样化的,这样就算禁用cookie一样可以跟踪 Cookie是完全保持在客户端的如:IE firefox 当客户端禁止cook

我的论坛源代码(二)_php基础

主界面,也就是显示主题列表的这页. //foxbbs.php 功能:显示论坛的主题 <HTML> <HEAD> <TITLE>狐网论坛</TITLE> <STYLE type=text/css> P {FONT-FAMILY: normal; FONT-SIZE: 9pt; LINE-HEIGHT: 14pt} DIV {FONT-FAMILY: normal; FONT-SIZE: 9pt; LINE-HEIGHT: 14pt} </ST