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>';
?>