文本版|topic 高级搜索
   名人堂 帮助 论坛制度 意见反馈 | 首页 博客 周新贴 招聘 专题 新闻
RSS 底部
 
社区导航: 专家门诊   网络技术   操作系统   数据库   程序设计   系统应用   考试认证   CIO及信息化   站长交流   综合交流   下载基地  51CTO产品服务 设为首页 | 收藏本站
51CTO技术论坛» Php » 自定义SESSION(一)——文件       [ 打印]  [ 订阅]  [ 收藏]  [ 推荐给朋友]   [ 本帖文本页]

论坛跳转:
     
标题: 自定义SESSION(一)——文件  ( 查看:285  回复:0 )   
 
whatilsyou
新新人类  点击可查看详细



帖子 7
精华 0
无忧币 10
积分 23
阅读权限 20
注册日期 2007-10-10
最后登录 2007-11-9 离线

[查看资料]  [发短消息]  [Blog
       
发表于:2007-10-10 09:41   标题:自定义SESSION(一)——文件
上一帖 |
之前没详细猜测试过session。今天自己动手试试,验证下。
环境:php5.2.1 +apache2.2+win xp

1、按默认方式测试。
推荐先把SESSION手册上的函数看看。
首先修改php.ini文件中的一些配置,把session.save_path修改下,方便调式。比如我修改成“E:/PCTI/TMP”。保存重启apache。
书写测试文件test.php

(E^ALL);
session_start();
$_SESSION['username']='test';
?>
next

  next.php

();
print_r($_SESSION);
print_r($_COOKIE);
?>
在浏览器中访问。

首先,打开我们设置的session保存路径,比如我的是E:/PCTI/TMP,果然在里面产生了一个文件。文件名是sess_****,而且****恰好是$_COOKIE['PHPSESSID']。
和我想象中的一样。

  2、测试session_set_save_handler
首先删除了session保存文件夹中的session文件。
这里我使用的是手册里面的例子。

function open($save_path, $session_name)
{
  global $sess_save_path, $sess_session_name;
        
  $sess_save_path = $save_path;
  $sess_session_name = $session_name;
  return(true);
}

function close()
{
  return(true);
}

function read($id)
{
  global $sess_save_path, $sess_session_name;

  $sess_file = "$sess_save_path/sess_$id";
  if ($fp = @fopen($sess_file, "r")) {
    $sess_data = fread($fp, filesize($sess_file));
    return($sess_data);
  } else {
    return(""); // Must return "" here.
  }

}

function write($id, $sess_data)
{
  global $sess_save_path, $sess_session_name;

  $sess_file = "$sess_save_path/sess_$id";
  if ($fp = @fopen($sess_file, "w")) {
    return(fwrite($fp, $sess_data));
  } else {
    return(false);
  }

}

function destroy($id)
{
  global $sess_save_path, $sess_session_name;
        
  $sess_file = "$sess_save_path/sess_$id";
  return(@unlink($sess_file));
}

/*********************************************
* WARNING - You will need to implement some *
* sort of garbage collection routine here.  *
*********************************************/
function gc($maxlifetime)
{
  return true;
}

session_set_save_handler("open", "close", "read", "write", "destroy", "gc");

session_start();

// proceed to use sessions normally

$_SESSION['username']='test';
?>
next
重新设置了。。结果和刚才一样。呵呵,那我们怎么知道我们自定义session处理成功了呢?

  修改下保存session的文件名看看,把代码中的$sess_file = "$sess_save_path/sess_$id";都改成$sess_file = "$sess_save_path/my_new_sess_$id";重新运行看看。

  哟,果然改变了。说明自定义session处理成功。

  那么如何使用session_set_save_handler把session保存到文件中呢?呵呵,原理应该很简单了。。



千里之外,传递你对震灾人民的关怀
2007-10-10 09:411楼
[ 顶部 ]
     
论坛跳转:  

| | |

标记已读 · 删除论坛Cookies · 文本版 · WAP
 
| 诚征版主 | 版主堂 | 意见建议 | 大史记 | 论坛地图
Copyright©2005-2008 51CTO.COM  Powered by Discuz!
本论坛言论纯属发布者个人意见,不代表51CTO网站立场!如有疑义,请与管理员联系。
京ICP备05051492号