当前位置:  编程技术>php
本页文章导读:
    ▪php4的session功能评述(三)       总的感觉php的session功能基本上还能用一用,还算方便,省了很多自己处理  cookie的麻烦事情。php的session管理还是基于文件的,默认的是在/tmp目录  下生成一个和session id同名的session文件.........
    ▪php4的session功能评述(一)       php4比php3新加了session的支持。稍微用了一下,对其函数接口,内部机制,  应用的方便性做了大概的了解。  session的意义大家都应该清楚,一个session可以包括数次http的请求和应答,  比.........
    ▪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 s.........

[1]php4的session功能评述(三)
    来源: 互联网  发布时间: 2013-11-30
总的感觉php的session功能基本上还能用一用,还算方便,省了很多自己处理  
cookie的麻烦事情。php的session管理还是基于文件的,默认的是在/tmp目录  
下生成一个和session id同名的session文件,在这个文件里保存register的  
session data。session有生存期,在/usr/local/lib/php.ini里可以设置。  

效率应该算马马虎虎了,毕竟还是要文件操作,虽然是/tmp的。对于服务量很  
大的应用会在/tmp里生成很多session文件,分特。。。  
对于分布式应用呢?几台web server一起服务?招倒是有,session文件的目录  
是可配置的,把所有的session文件搞到一个共享的nfs目录就完事了。但是php  
生成唯一文件的时候有没有考虑过nfs的特殊处理?我没仔细去看源码,估计会  
出问题,虽然几率很小...  

倒是可以做个session keeper的damon,session数据可以通过hash表的方式存  
贮在内存里,以udp服务方式(效率高,lan里面包丢失率小)完成session的生
成,检索,结束,取置session变量等操作,这样多台web server可以共享
session信息。服务端和客户端的函数我都做了,现在问题是怎样把客户端的函
数加到php里面,或者php对动态库函数调用的支持怎么样,这些东西manual里
面都很不详尽,没有相关的例子。

BTW:由于语法的不严格,php的函数返回容易造成二义性,比如strpos,没有
匹配返回0,但是匹配的position可能是0的,faint~...




    
[2]php4的session功能评述(一)
    来源: 互联网  发布时间: 2013-11-30
php4比php3新加了session的支持。稍微用了一下,对其函数接口,内部机制,  
应用的方便性做了大概的了解。  
session的意义大家都应该清楚,一个session可以包括数次http的请求和应答,  
比如我们用163.net,从login到logout或者超时就作为一个session,session  
的唯一标识一般是在系统内部生成一个唯一的session ID,一般是一个挺长的  
字符串。一个session除了session ID,还可以有自己的session data,可以  
记录和区分sesion的不同状态。  

php4对session操作提供以下接口:  

session_start — Initialize session data  
session_destroy — Destroys all data registered to a session  
session_name — Get and/or set the current session name  
session_module_name — Get and/or set the current session module  
session_save_path — Get and/or set the current session save path  
session_id — Get and/or set the current session id  
session_register — Register a variable with the current session  
session_unregister — Unregister a variable from the current session  
session_is_registered — Find out if a variable is registered in a session  
session_decode — Decodes session data from a string  
session_encode — Encodes the current session data as a string  

意义大家一看就能明白,session_start开始一个session,session_destroy结  
束一个session,session_id取得当前的session_id,session_register向当前  
的session注册一个变量,这个很有用,比如用户逛商场,选中了某几样商品你  
就可以用session_register把商品名称或者代码register到当前的session中。  

比如下面例子(摘自php manual):  

<?php  
session_register("count");  
$count++;  
?>  

Hello visitor, you have seen this page <? echo $count; ?> times.<p>  
# the <?=SID?> is necessary to preserve the session id
# in the case that the user has disabled cookies

To continue, <A HREF="/blog_article/nextpage/lt;/SID/gt;.html">click here</A>

session_register可以隐式地激发session_start(如果用户之前没发session_
start调用),当前的session注册了一个变量count,每次用户点击click here
的时候,这个变量都会增一。你可以自己试一下。<?=SID?>的意义不多赘述。  


    
[3]php4的session功能评述(二)
    来源: 互联网  发布时间: 2013-11-30
比较模糊的是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 "";
    }
}
?>                 

    
最新技术文章:
▪PHP函数microtime()时间戳的定义与用法
▪PHP单一入口之apache配置内容
▪PHP数组排序方法总结(收藏)
▪php数组排序方法大全(脚本学堂整理奉献)
▪php数组排序的几个函数(附实例)
▪php二维数组排序(实例)
▪php根据键值对二维数组排序的小例子
▪php验证码(附截图)
▪php数组长度的获取方法(三个实例)
▪php获取数组长度的方法举例
▪判断php数组维度(php数组长度)的方法
▪php获取图片的exif信息的示例代码
▪PHP 数组key长度对性能的影响实例分析
.net/c#/asp.net iis7站长之家
▪php提交表单到当前页面、提交表单后页面重定...
▪php四舍五入的三种实现方法
▪php获得数组长度(元素个数)的方法
▪php日期函数的简单示例代码
▪php数学函数的简单示例代码
▪php字符串函数的简单示例代码
▪php文件下载代码(多浏览器兼容、支持中文文...
▪php实现文件下载、支持中文文件名的示例代码...
▪php文件下载(防止中文文件名乱码)的示例代码
▪解决PHP文件下载时中文文件名乱码的问题
▪php数组去重(一维、二维数组去重)的简单示例
▪php小数点后取两位的三种实现方法
▪php Redis 队列服务的简单示例
▪PHP导出excel时数字变为科学计数的解决方法
▪PHP数组根据值获取Key的简单示例
▪php数组去重的函数代码示例
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3