PHP中Session在配置和自定义文件存储
一、介绍SESSIO信息写入到自己定义的位置
1. 解决跨机保存SESSION
在Linux下可以使用nfs或是samba, windows共享文件夹的方式
使用数据库来实现
memcache来保存会话信息
session_set_save_handler()
2. 解决在线用户信息
二、介绍一下PHP配置文件中的常用选择(PHP.in) (写个例子演示, 以下参数,用默认的存储方未予)
session.name
session.use_trans_sid 等于1:启用SID的支持,默认为0
session.save_path=
session.use_cookies =1 默认
session.cookie_path = '/' 默认
session.cookie_domain = '' 默认
session.cookie_lifetime = 0 0表示关闭浏览器,cookie到期,单位为秒
session.save_handler= memcache 或 user 默认为files
session.gc_maxlifetime
garbage collection 垃圾回收
指定过了多少秒之后数据就会被视为“垃圾”,并被清除
session.gc_probability=1
session.gc_divisor=100
这两个合起来就是启动gc进程管理概率的
初使化时(session_start())
session.gc_probability/session.gc_divisor
1/100:百分之一的概率启动垃圾回收
三、介绍一下session_set_save_handler()函数的使用
session_set_save_handler()
四、写入自己定义的文件,或远程服务器的硬盘中
1、自定义的session类 session.php
<?php //在运行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数据到$_SESSION中 function read($id){ global $sess_save_path; $sess_file=$sess_save_path."/glf_".$id; return (string)@file_get_contents($sess_file); } //结束时和session_write_close()强制提交SESSION数据 $_SESSION[]="aaa"; function write($id, $sess_data){ global $sess_save_path; $sess_file=$sess_save_path."/glf_".$id; if($fp=@fopen($sess_file, "w")){ $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."/glf_".$id; return @unlink($sess_file); } //ession.gc_probability和session.gc_divisor值决定的,open(), read() session_start也会执行gc function gc($maxlifetime){ global $sess_save_path; foreach(glob($sess_save_path."/glf_*") as $filename){ if(filemtime($filename)+$maxlifetime < time() ){ @unlink($filename); echo $filename; } } return true; } session_set_save_handler("open", "close", "read", "write", "destroy","gc"); session_start(); ?>
2、自设定的:one.php
<?php include "session.php"; $_SESSION["isLogin3"]=1; $_SESSION["username"]="admin"; $_SESSION["uid"]=333; echo session_name().'='.session_id().'<br>'; ?>
3、在第二个页面取session的值:two.php
<?php include "session.php"; print_r($_SESSION); echo '<br>'; echo session_name().'='.session_id().'<br>'; ?>
4、清楚session值:three.php
<?php include "session.php"; $_SESSION=array(); if(isset($_COOKIE[session_name()])){ setCookie(session_name(), '', time()-100, '/'); } session_destroy(); echo session_name().'='.session_id().'<br>'; ?>