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