SESSION的使用

session和cookie相似,都用来存储使用者的资料。最大不同是session存储在服务器端,cookie存储在浏览器端

当某个用户向web服务器发送请求时,服务器首先检查这个客户端的请求里是否已经包含了一个Session ID 如果包含,说明之前已经为此用户创建过Session,服务器则按该Session ID把Session检索出来使用。如果客户端请求不包含Session ID,则为该用户创建一个Session,并且生成一个与此Session关联的Session ID,本次相应被传送到客户端保存。

Session会在一定时间内保存在服务器上。当访问增多,会比较占用服务器的性能。(每调用一次session_start()函数,服务器中的sess_开头的文件便新创建一个)

Session自动回收机制:

直接关闭浏览器后,服务器端保存的Session文件是不会被删除的,但下次打开浏览器登陆原网页时,会重新分配Session ID

用session.cookie_lifetime=0,设置Session ID在浏览器Cookie中的有效期。0表示知道浏览器关闭,Session ID才会消失。

用session.gc_maxlifetime选项来指定一个时间,当网页刷新或加载后,会更改session文件的时间,“垃圾回收程序”启动后会在所有session文件中排查,删除修改时间距离当前系统时间大于session.gc_maxlifetime设置值的session文件(只是将文件设置为空,并不删除文件)。

Session ID的传递:

1、cookie方式传递

例:

 1 <?php
 2   session_start();
 3   function clearcookie()
 4   {
 5     foreach($_COOKIE as $key=>$val)
 6       setcookie($key,'',time()-1);
 7   }
 8 
 9   function clearsession()
10   {
11     $_SESSION=array();
12     setcookie(session_name(),'',time()-1);
13     session_destroy();
14   }
15 
16   if($_GET["action"]=="setsess")
17   {
18     $key=$_POST['session_name'];
19     $value=$_POST['session_value'];
20     $_SESSION["{$key}"]="{$value}";
21   }else if($_GET["action"]=="discook"){
22     print_r($_COOKIE);
23   }else if($_GET["action"]=="dissess"){
24     print_r($_SESSION);
25   }else if($_GET["action"]=="deletecook"){
26     clearcookie();
27   }else if($_GET["action"]=="deletesess"){
28     clearsession();
29   }
30 ?>
31 <html>
32 
33   <form action="session.php?action=setsess" 
34 
35 method="post">
36     <input type="text" name="session_name"/>
37     <input type="text" name="session_value"/><br>
38     <input type="submit" value="setSession"/>
39   </form>
40 
41   <br>
42   <br>
43   <br>
44 
45   <form action="session.php?action=discook" 
46 
47 method="post">
48     <input type="submit" value="disCookie"/>
49   </form>
50 
51   <br>
52   <br>
53   <br>
54 
55   <form action="session.php?action=dissess" 
56 
57 method="post">
58     <input type="submit" value="disSession"/>
59   </form>
60   <br>
61   <br>
62   <br>
63 
64   <form action="session.php?action=deletecook" 
65 
66 method="post">
67     <input type="submit" value="deleteCookie"/>
68   </form>
69   <br>
70   <br>
71   <br>
72 
73   <form action="session.php?action=deletesess" 
74 
75 method="post">
76     <input type="submit" value="deleteSession"/>
77   </form>
78 </html>
cooksess.php

2、浏览器禁用cookie后,可用URL方式传递

例:

 1 <?php
 2   $sid=!empty($_GET[session_name()])?$_GET[session_name()]:'';
 3   session_id($sid);
 4   session_start();
 5 ?>
 6 
 7 <html>
 8   <a href="urlsess2.php?<?php echo session_name().'='.session_id()?>">page2</a>
 9   <a href="urlsess3.php?<?php echo session_name().'='.session_id()?>">page3</a>
10 </html>
urlsess.php
1 <?php
2   $sid=!empty($_GET[session_name()])?$_GET[session_name()]:'';
3   session_id($sid);
4   session_start();
5   echo session_name().'='.session_id();
6 ?>
urlsess2.php
1 <?php
2   $sid=!empty($_GET[session_name()])?$_GET[session_name()]:'';
3   session_id($sid);
4   session_start();
5   echo session_name().'='.session_id();
6 ?>
urlphp3.php

 

posted @ 2018-04-15 10:10  第五  阅读(169)  评论(0编辑  收藏  举报