PHP会话控制:Session与Cookie详解(3)

我们把需要通过session保存的用户状态信息,称为用户session数据,也称为session data。一般是在当前session生命周期内,相应的$_SESSION数据。一旦调用了session_start()初始化session,就意味着开始了一个session生命周期。也就是宣布了,可以使用相关函数操作$_SESSION来管理session数据。这个session生命周期产生的数据并没有实时地写入session文件,而是通过$_SESSION变量寄存在内存中。$_SESSION是一个全局变量,类型是Array,映射了session生命周期的session数据,寄存在内存中。在session初始化的时候,从session文件中读取数据,填入该变量中。在session(生命周期)结束时,将$_SESSION数据写回session文件。

注册一个会话变量:

从PHP4.1以后,会话变量保存在超级全局数组$_SESSION中。要创建一会话变量,只需要在数组中设置一个元素,如:

复制代码 代码如下:


$_SESSION['domain'] = blog.jb51.net;
$_SESSION['poll']=$_SESSION[poll] + 1;


使用一个会话变量:

复制代码 代码如下:


echo $_SESSION['blogdomain'];   //打印出blog.jb51.net,使用会话前必须先使用session_start()函数启动一个会话

注销Session变量/销毁会话:

复制代码 代码如下:


unset($_SESSION);  //销毁单个会话变量
如:unset($_SESSION['blogdomain']);
#unset($_SESSION)这个函数会将全局变量$_SESSION销毁,而且还没有可行的办法将其恢复。用户也不再可以注册$_SESSION变量,所以此函数千万不可使用。

session_unset(); //多项释放。将所有登陆在session文件里的变量释放出来
#在session生命周期,从当前session中注销全部session数据,让$_SESSION成为一个空数组。它与unset($_SESSION)的区别在于:unset直接删除$_SESSION变量,释放内存资源;另一个区别在于,session_unset()仅在session生命周期能够操作$_SESSION数组,而unset()则在整个页面(page)生命周期都能操作$_SESSION数组。session_unset()同样不进行任何IO操作,只影响$_SESSION数组。

$_SESSION=array();  //多项释放,释放所有登录在$_SESSION参数里的变量

session_destroy();
#当使用完一个会话后,首先应该注销所有的变量,然后再调用该函数结束当前的会话,并清空会话中的所有资源,删除服务器上的session文件.该函数不会unset(释放)和当前session相关的全局变量,也不会删除客户端的session cookie
#如果说session_start()初始化一个session的话,而它则注销一个session。意味着session生命周期结束了。在session生命周期结整后, session_unset, $_SESSION['domain'] 都将不能操作$_SESSION数组,而$_SESSION数组依然可以被unset()等函数操作。这时,session意味着是未定义的,而$_SESSION依然是一个全局变量,他们脱离了关映射关系。
通过session_destroy()注销session,除了结束session生命周期外,它还会删除sesion文件,但不会影响当前$_SESSION变量。即它会产生一个IO操作。

备注:

1、php默认的session是基于cookie的,如果要删除cookie的话,必须借助setcookie()函数
2、session_unset()和unset()函数区别:

在session生命周期,session_unset()从当前session中注销全部session数据,让$_SESSION成为一个空数组。它与unset($_SESSION)的区别在于:unset直接删除$_SESSION变量,释放内存资源;另一个区别在于,session_unset()仅在session生命周期能够操作$_SESSION数组,而unset()则在整个页面(page)生命周期都能操作$_SESSION数组。session_unset()同样不进行任何IO操作,只影响$_SESSION数组。

Session生命周期(session lifetime):Session失效时间与过期回收机制
我们把初始化session开始,直到注销session这段期间,称为session生命周期
默认的,php会将session保存在php.ini配置中session.save_path设定的目录下,文件名为这个样子:sess_ves0d7uvdsab9k6sig73mnn592。每一个文件对应了一个session(会话)。session文件格式大致如下:

复制代码 代码如下:


poll_200|i:1;poll_100|i:3;   //#变量名|类型:长度:值

设置SESSION的生命周期:

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/b23af1e1a590a24e9db6226cac7e5f40.html