session指的是一个回话,他们存储一个特定用户与交互系统之间的数据,拥有一个唯一的标示符,session默认是以文件形式存储在服务器端的c:/window/temp目录。
session默认的什么周期就是从用户打开一个浏览器到关闭浏览器,当用户启用session时,会随机生成一个session_id,当然你也可以用session_id()来指定特定id,默认情况下session_id会回传给所使用的客户端用cookie存储,再次使用时通过cookie传递id就可以使用指定的session文件的值。
session是以session_start()开始的,默认情况下会调用php中的save_handler机构,其实php也给我们提供了一个session_set_save_handler()函数,我们通过这个函数来自定义session的工作方式
1 <?php 2 3 //自定义函数来操作session的工作情况 4 5 //打开文件 6 function open($save_path,$session_name){ 7 8 global $session_save_path; 9 $session_save_path=$save_path; 10 echo ('这是open函数<br />'); 11 return true; 12 } 13 14 //关闭文件 15 function close(){ 16 echo '这是close函数<br />'; 17 return true; 18 } 19 20 //读取文件 21 function read($id){ 22 echo ('这是read函数<br />'); 23 global $session_save_path; 24 $save_file="$session_save_path/sess_$id"; 25 //echo $save_file; 26 $val=@file_get_contents($save_file);28 return $val; 29 } 30 31 //写入文件 32 function write($id,$session_data){ 33 echo '<br />这是write函数<br />'; 34 global $session_save_path; 35 $save_file="$session_save_path/sess_$id"; 36 if(file_put_contents($save_file,$session_data)){ 37 return true; 38 }else{ 39 return false; 40 } 41 } 42 43 //销毁文件 44 function destroy($id){ 45 echo '这是destroy函数<br />'; 46 global $session_save_path; 47 $save_file="$session_save_path/sess_$id"; 48 return (unlink($save_file)); 49 } 50 51 //文件回收函数 52 function gc($maxlifetime){ 53 echo '这是gc函数<br />'; 54 global $session_save_path; 55 foreach(glob("$session_save_path/sess_*") as $file){ 56 if(filemtime($file)+$maxlifetime<time()){ 57 unlink($file); 58 } 59 } 60 return true; 61 } 62 63 //session处理函数 64 session_set_save_handler('open','close','read','write','destroy','gc'); 65 66 //开始session 67 session_start(); 68 69 ?>
调用这个文件,你会得出这个结果
这是open函数
这是read函数
这是write函数
这是close函数
这个表明session_start()函数实际在调用时先调用open函数,用来打开session所在的目录;再就是read函数,该函数返回读取session文件的所有数据;read返回数据后我们可以再一个script文件通过$_SESSION[]方法读取;在就是读取里面的write函数,该函数将script里面通过$_SESSION[]添加的值写入到session文件中;最后调用close函数,该函数是在页面结束的时候调用。
其中的destroy函数就是你在脚本script中使用session_destroy()是调用,目的就是为了销毁文件,而gc函数就是一个垃圾文件回收的功能,当一个session文件修改的时间超过php指定的maxlefttime是就会被视为垃圾文件,这是就可以通过gc文件来销毁,gc函数式每个session_start()使用时被调用,然后每次独有0.1%的机会销毁垃圾文件(这也是php的默认设置,你也可以通过修改php.ini 的session_gc_probability和session_gc_divisor参数的值来改变,他们的计算公式是session_gc_probability/session_gc_divisor).
session的使用范围挺广的,在用户登陆时我们可以将用户名和密码通过session存储起来,然后在所有的页面都可以通过session显示用户名;在购物网站我们也可以用到session,当你将所要购买的商品加入到购物车时也将他加入到session,这样就可以方便在所有页面查看你的购物车的信息了