首页 > 代码库 > session
session
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 //开始session67 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,这样就可以方便在所有页面查看你的购物车的信息了