🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
大家学完PHP中的Session处理机制之后都会使用了,但是不知道这种机制背后实现的方法是什么样的?今天我来简单写一下,顺便为日后的Session数据库存储做准备。 代码如下: 查看源码打印代码帮助 PHP配置文件中session.save_handler的默认值是files,表示默认情况下用文件来存储session信息,现在我们要自定义session处理机制,所以把session.save_handler的值改成【user】; ini_set('session.save_handler','user'); //start方法,两个参数默认分别是session存放目录和session名称 function start($path,$name){ global $session_path,$session_name,$session_id; $session_path = $path; $session_name = $name; $session_id = $_COOKIE[$session_name]; echo 'start<br/>'; echo $session_name.'<br/>'; echo $session_path.'<br/>'; echo $session_id.'<br/>'; } function read(){ global $session_path,$session_name,$session_id,$session_file; $session_file = $session_path.'/'.$session_id; echo 'read<br/>'; echo $session_file.'<br/>'; return file_get_contents($session_file) ? true : false; } //write方法的参数分别是sessin_id和要往session文件中写入的数据 function write($sid,$data){ global $session_path,$session_name,$session_id,$session_file; $session_id = $sid; echo 'write<br/>'; return file_put_contents($session_file,$data) ? true : false; } function close(){ echo 'close<br/>'; return true; } function destroy(){ global $session_file; echo 'destroy<br/>'; unlink($session_file); } //$maxtime是session有效时间 function gc($maxtime){ echo 'gc<br/>'; foreach(glob($session_path.'/*') as $file){ //如果session最后修改时间+有效期限<当前时间,说明session已过期,就要被当作垃圾文件删除 if(filemtime($file)+$maxtime<time()){ unlink($file); } } } //开、关、读、写、卸、垃 session_set_save_handler('start','close','read','write','destroy','gc'); session_start(); $_SESSION['webname'] = 'fxxy'; echo $_SESSION['webname'].'<br/>'; 搞清楚session处理机制,理解session数据库存储原理就很容易了!