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

原文地址:https://www.cnblogs.com/wenxianguo/p/3899166.html