PHP的Session详解

zxh5566  2016-08-29 07:18   Hits: 

1、配置Session

在PHP配置文件中,有一组合Session相关的配置选项,通过对一些选项重新设置新值,就可以对Session进行配置,否则使用

默认的Session配置,在php.ini中和Session有关的,一些有意义的配置如下

session.auto_start  自动启动会话,0表示禁用,1表示开启  默认:0
session.cache_expire 为缓存中的会话设置当前时间,单位分钟 默认 180
session.cookie_domain 指定会话Cookie中的域 默认:none
session.cookie_lifetime Cookie中的Session ID在客户端的保存时间,0表示延续到浏览器关闭 默认 0
session.cookie_path 在会话Cookie中要设置的路径 默认 /
session.name 会话名称,在客户端用做Cookie的标识 默认PHPSESSID
session.save_path 会话在服务器存储的路径 默认 /tmp
session.use_cookies 配置在客户端使用 Cookie的会话,1表示允许,默认 1

2、Session的声明与使用

Session的设置不同于Cookie,必须先启动,在PHP中必须调用session_start()函数,以便让PHP核心程序,将和Session相关

的内建环境载入内存,session_start()函数有两个作用,一是开始一个会话,二是返回已经存在的会话,这个函数没有参数

,且返回值均为true。如果你使用基于Cookie的Session,在使用该函数开启Session前,不能有任何的输出内容,因为基于

Cookie的Session是在开启的时候,调用session_start()函数会生成一个唯一 Session ID,需要保存在客户端电脑的Cookie

中,和setCookie函数一样,调用之前不能有任何的输出,空格或空行。如果已经开启Session,再次调用Session_start()函

数时候,不会再创建一个新的Session ID,因为当用户再次访问服务器时,该函数会通过从客户端携带过来的Session ID,返

回已经存在的 Session,所以在会话期间,同一个用户在访问服务器上任何一个页面时,都是用同一个Session ID。

如果你不想在每个页面脚本都使用session_start()函数来开启Session,可以在php.ini里设置session.auto_start = 1;则

无须每次使用Session都调用session_start()函数,但启用该选项也有一些限制,则不能将对象放入Session中,因为类定义

必须在启动Session之前加载,所以不建议使用php.ini来开启Session。

3、注册一个会话变量和读取Session

在PHP中使用Session变量,除了必须开启,还要经过注册过程,注册和读取Session变量,都要通过访问$_SESSION数组完成

,必须在调用session_start()函数来开启Session之后使用,$_SESSION总是具有全局属性,注册Session代码如下

<?php
session_start();
$_SESSION['username'] = 'zxh5566';
$_SESSION['password'] = '123456';
?>

执行该脚本后,两个Session变量会被保存在服务器端的某个文件中,该文件的位置是通过php.ini文件,在

session.save_path属性指定的目录下,为这个访问用户单独创建一个文件,用来保存注册的Session变量,这个文件可以用

文本编辑器打开,该文件的结构为 变量名|类型:长度:值;

4、注销变量与销毁Session变量

当使用完一个Session变量后,可以将其删除,当完成一个会话后,也,可以将其销毁,如果用户想退出web系统,就需要为

他提供一个注销的功能,把他的所有信息在服务器中销毁,销毁和当前Session变量有关的所有资料,可以调用

session_destroy()函数结束当前会话,并清空会话中的所有资源。相对于session_start()函数,该函数用来关闭Session的

运转,如果成功返回true,销毁Session资料失败返回false。但该函数并不会释放和当前Session相关的变量,也不会删除保

存在客户端Cookie中的Session ID 。因为$_SESSION数组和自定义的数组在使用上是相同的,所以我们可以使用unset()函数

来释放在Session中注册的单个变量。一定要注意,不要使用unset($_SESSION)删除整个$_SESSION数组,这样将不能再通过

其注册变量了,但如果想把某个用户在Session中注册的所有变量删除,可以直接将数组变为空数组。

PHP默认的Session是基于Cookie的,Session ID被服务器存储在客户端的 Cookie中,所以在注销Session时也需要清除

Cookie中保存的Session ID ,而这就必须借助 setCookie函数完成,在Cookie中,保存 Session ID 的Cookie标识名称就是
Session的名称,这个名称是在php.ini中,通过session.name属性指定的,在PHP脚本中,可以通过调用session_name()函数

获取Session名称,删除保存在客户端Cookie中的Session ID,代码如下:

<?php
if(isset($_COOKIE[session_name()])){
setcookie(session_name(),'',time()-3600,'/');
}
?>

通过前面介绍我们可以总结出来Session注销过程需要四步骤,代码如下:

<?php
session_start()
$_SESSION = array();
if(isset($_COOKIE[session_name()])){
setcookie(session_name(),'',time()-3600,'/');
}
session_destroy();
?>

上一篇:PHP中cookie的设置与读取
下一篇:PHP中的抽象方法和抽象类