关于session的几个补充函数

  在PHP下,关于session的讨论很多,其实在PHP4中还有几个函数是我们平时没有注意到的。

  下面我把它们介绍给大家吧。

  其中的session_set_save_handler()可真是个好东西。

  //********************

  session_unset(PHP4>=4.0b4)

  void session_unset(void);

  这个函数可以把当然注册的所有的session变量置为空。注意它不是unregister,也不同于destroy。

  下面这个例子,对此函数做了很好的说明。

  <?php

  session_register("a","b","c");//auto-session-start

  $a=1;

  $b=2;

  $c=3;

  session_unregister("a");//unregistrered$a

  echo"A:$a-reg:".session_is_registered("a")."

  ";//but the global$a remains

  session_unset();//unsets$b und$c

  echo"B:$b-reg:".session_is_registered("b")."

  ";//the registration remains!

  echo"C:$c-reg:".session_is_registered("c")."

  ";

  echo session_encode();

  ?>

  输出:

  A:1-reg:

  B:-reg:1

  C:-reg:1

  !b|!c|

  //********************************

  session_get_cookie_params(PHP4>=4.0RC2)

  array session_get_cookie_params(void);

  返回一个数组,记录了当前session的cookie的一些信息。

  有:

  "lifetime"-cookie的生存期。

  "path"-cookie的保存路径。

  "domain"-cookie的域。

  //*******************************

  session_set_cookie_params(PHP4>=4.0b42881064151)

  void session_set_cookie_params(int lifetime[,string path][,string domain]])

  设置session的cookie的一些参参数,类似于php.ini中的设置,但本函数所作的设置,只对当前脚本文件有效。

  //*******************************

  下面要介绍的这个函数应是对大家都很有用的,你是不是对自定义一个不用cookie来保存的session有兴趣呢?这个函数就可以实现你这样的设想。

  让我想想,如果不用cookie的好处是什么?至少一点,你不用担心客户端的的cookie的功能是否打开了,对吧。

  session_set_save_handler(PHP4>=4.0b4)

  void session_set_save_handler(string open,string close,string read,string write,string destroy,string gc)

  这个函数可以定义用户级的session的保存函数(打开、关闭、写入等)。

  比如,我们想把session保存在本地的一个数据库中时,本函数就很有用了。

  !!注意:使用本函数前,先要配置php.ini文件,session.save_hadler=user,否则,session_set_save_handler()不会生效。

  此外,根据我的测试,你如果想让这样的session跨页面使用,还要在每一个用到session的脚本文件中加入你自定的函数及session_set_save_handler,所以,最好的方法是做成一个单独的文件,在每一个要用到session的脚本中用include来包含进来。

  下面这个例子提供了一个最基本的session保存法,类似于默认的files方法。

  如果你想用数据库来实现,这也是很容易做到的。

  Example 1.session_set_save_handler()example

  <?php

  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("");

  }

  }

  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));

最新文章

  1. 1220 - Mysterious Bacteria--LightOj1220 (gcd)
  2. npm下载包时代理配置
  3. [转载]ExtJs4 笔记(10) Ext.tab.Panel 选项卡
  4. 【Java 基础篇】【第三课】表达式、控制结构
  5. (六)6.13 Neurons Networks Implements of stack autoencoder
  6. shell命令getopts解析
  7. AspNet WebApi: 了解下HttpControllerDispatcher,控制器的创建和执行
  8. Java基础知识强化81:Math类random()方法之获取任意范围的随机数案例(面试题)
  9. 如何实现SQL事务的提交,又不对外进行污染
  10. POSIX 消息队列相关问题
  11. mac os 中如何修改顶栏图标的顺序
  12. C#通过序列化实现深表复制
  13. 接口自动化框架(java)--3.get,delete请求,Excel管理多种请求类型
  14. json序列化NULL
  15. [Java Web学习]JSP中uri="http://java.sun.com/jsp/jstl/core"报红错误
  16. Logstash使用grok插件解析Nginx日志
  17. 如何利用 Python 完成验签操作
  18. EasyUI datagrid columns 中 field 区分大小写
  19. 比较jquery中的after(),append(),appendTo()方法
  20. 用 React 整合 LogEntries JavaScript 库

热门文章

  1. iOS xib中TableView创建的2种模式
  2. canvas API ,通俗的canvas基础知识(三)
  3. mybatis随机生成可控制主键的方式
  4. Gym 100851E Easy Problemset (模拟题)
  5. HDU 5317 RGCDQ (数论素筛)
  6. emmet中文文档 (转载)
  7. icon上添加数字提醒
  8. 今天连续几次被其他电脑客户端踢下线,也不知是否是ip冲突
  9. Java Hour 42 fastjson
  10. 电赛总结(四)——波形发生芯片总结之AD9854