php性能如何,php性能如何? _ 路由器设置|192.168.1.1|无线路由器设置|192.168.0.1 - 路饭网...

php性能如何?

session的意思是对话。关于session是如何使用cookies的,这里就不多说了。我们着重讨论一下PHP的session机制。

1。SESSION的操作

php在session_start的时候会检验该次对话是否有session的存在,如果没有就建立。

session_register的时候会对session做一次修改。每次给session赋值的时候也会做一次修改。

同理取消某个session值的时候也会修改。

2。SESSION的存储

通用的SESSION有2种存储方式。文件和数据库。

不管使用文件/数据库。SESSION的这种频繁操作都会造成系统的I/O负载加重。

文件和数据库的比较:

数据库的存储比较方便,管理起来也是这样。而且能支持多台SERVER共享SESSION。但效率非常低。

文件存储速度很快,经过测试,使用3层的session目录结构是最佳方式。但弱点就是session共享不方便。

3。对session的“肤浅”改造。

减少对session的频繁操作。可以将需要的session做一个值,放入session中存放。

比如$_SESSION['id'] = 12345; $_SESSION['name'] = 'abcd';

我们完全可以组合成:$_SESSION['MYSESSSION'] = 'id:5:12345|name:4:abcd|'的形式存放。这样极大的减少了I/O负载。

4。对session的深层改造。

初步设想,修改session模块,进一步减少SESSION的操作频繁度,进行session文件的可控制性。加强使用文件session同时,多台SERVER的共享性。减少使用文件数据库存储session时,对数据库连接的频繁性(长连接?)

2004-07-23补充一下对session的“肤浅”改造。

class MySession

{

var $G_DT_SEESION= false;

var $mysess= array();

var $sestr= '';

var $errno= 0;

var $register= false;

function MySession()

{

if (!$this->G_DT_SEESION)

{

if(!session_start())

{

$this->_set_errno(103);

return false;

}

$this->G_DT_SEESION= true;

if (isset($_SESSION['MYWEBSESSION']))

{

$this->register = true;

$this->sestr = $_SESSION['MYWEBSESSION'];

}

else

{

session_register('MYWEBSESSION');

}

}

if($this->register)

{

$this->_split_sess();

}

}

function _set_errno($no)

{

$this->errno = $no;

}

function set_val($k,$v)

{

if ($this->errno)

return false;

$this->mysess[$k] = $v;

}

function get_val($k)

{

return $this->mysess[$k];

}

function _split_sess()

{

$c = strlen($this->sestr);

$flag = 0;

for ($i = 0, $v= 1, $x= 0; $i < $c; $i++)

{

switch ($v)

{

case 2:

if ($this->sestr{$i} == ':')

{

$vallen = 0;

$vallen += substr($this->sestr, $i - $x, $x);

if ($vallen > 0)

{

$i++;

$valstr = substr($this->sestr, $i, $vallen);

$i += $vallen - 1;

}

else

{

$valstr = '';

}

$this->mysess[$keystr] = $valstr;

$x = 0;

$v = 0;

$flag++;

}

else

{

$x++;

}

break;

case 1:

if ($this->sestr{$i} == ':')

{

$keystr = substr($this->sestr, $i - $x, $x);

$x = 0;

$v++;

}

else

{

$x++;

}

break;

case 0:

default:

if ($this->sestr{$i} == '|')

{

$x = 0;

$v++;

}

break;

}

if ($this->sestr{$i} == "/n")

{

break;

}

}

}

function is_ok()

{

return !$this->errno;

}

function my_dump()

{

if ($this->errno)

return false;

foreach($this->mysess as $k => $v)

{

$str .= $k . ':' . strlen($v) . ':' . $v . '|';

}

$_SESSION['MYWEBSESSION'] = $str;

}

function get_session_id()

{

return session_id();

}

function my_session_unregister($k)

{

session_unregister($k);

}

function my_session_unset()

{

session_unset();

}

function err_msg()

{

switch ($this->errno)

{

case 103:

return 'session start error';

default:

return;

}

}

}

$cc = new MySession();

$cc->set_val('aaa','1111');

$cc->set_val('bbb','222');

$cc->my_dump();

echo $cc->get_session_id()."

";

/*

echo $cc->get_val('aaa');

echo $cc->get_val('bbb');

*/

echo session_save_path();

?>

适用于多session的存储.当然还有改造的余地.

本文地址:http://www.45fan.com/a/question/66958.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值