自定义session信息写入文件

来源:互联网 发布:守序邪恶知乎 编辑:程序博客网 时间:2024/06/06 01:26

写网站程序时,可能会要求session写到规定的路径,所以,写了这个php文件,已验证成功,不足之处,欢迎多多指教。学习中

自定义session文件保存路径

保存到 D:/session

 

介绍一下PHP配置文件中的常用选择(PHP.ini)

session.name                  session名称

session.use_trans_sid        启用SID的支持  

session.save_path             session保存路径 

 

基于cookiesession信息

session.use_cookies = 1       是否指定客户端互为会话

session.cookie_path = '/'     指定会话的cookie的路径 cookie是一定要加上 /

session.cookie_domain =''     指定设置会话cookie默认的域名

session.cookie_lifetime =0     cookie在客户端保存的时间

 

session.save.handler=files/user/memcache    系统默认/用户自定义/mem来保存会话信息

 

session.gc_maxlifetime

         垃圾回收 garbagecollection

         指定过了多少秒之后数据就会被视为“垃圾”,并被清除

session.gc_probability=1

session.gc.divisor=100

这两个合起来就是启动gc进程管理概率的

         初始化时(session_start()

         session.gc.probability/session.gc.divisor

         1/100  (1%的概率删。一百个没用的当中删一个)

 

首先,把php.ini的这个方法给成user,session.save_handler = user   ;可以改成files/user/memcache

 

代码如下:

<?php

/*
自定义用文件存储session信息
*/

//在运行session_start()的时候执行 //启动会话
function open($save_path,$session_name){
    global $sess_save_path;
    $sess_save_path =$save_path;
   
    return true;
}

//session_write_close()和session_destroy()的执行
function close(){  
    return true;

}

//也是session_start()时候执行,读取session写入到$_SESSION中
function  read($id){
   global $sess_save_path;
   
   $sess_file=$sess_save_path."/wzy_".$id;
  
   return (string) @file_get_contents($sess_file); //文件操作读session
   //语句前面加个@表示 屏蔽错误
}

//脚本结束时和session_write_close()强制提交SESSION数据时执行
function write($id,$sess_data){
   global $sess_save_path;
  
   $sess_file=$sess_save_path."/wzy_".$id;

   if($fp=fopen($sess_file,"w")){ //把session数据用文件操作写入文件
       $return=fwrite($fp,$sess_data);
       fclose($fp);
       return $return;
   }else{
       return false;
   }
}

//执行session_destroy()时候销毁
function destroy($id){
   global $sess_save_path;

   $sess_file=$sess_save_path."/wzy_".$id;

   return unlink($sess_file); //文件操作销毁指定文件
}

//session.gc_probability和session.gc.divisor的值决定的,时机是在open(),read(),session_start()的时候执行gc
function gc($maxlifetime){
   global $sess_save_path;

   foreach(glob($sess_save_path."/wzy_*") as $filename){
        if(filemtime($filename)+$maxlifetime<time()){ //session文件上次修改的是时间+保存时间<当前时间 则删除
            unlink($filename);
        }
   }

   return true;
}

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

session_start();

 

?>