您的位置:首页 > 其它

关于session销毁的一些总结

2014-06-07 16:32 225 查看
在日常的web开发中,我们经常需要用到一些关于会话处理的知识,今天在这里就讨论一下关于在用户退出网站时候的关于session销毁的问题。

session的销毁,php为我们提供了一个session_destroy()函数,我们都知道$_SESSION是一个数组,那么既然是数组,我们就可以用unset来删除。

首先说一下$_SESSION数组,我们每次通过访问$_SESSION数组里面的值其实都有一个我们没看到的过程,这个过程就是每次php都需要首先从对应的session文件中去读出这个文件里的session信息,放到$_SESSION数组里面,然后我们开始使用这个数组。那么在我们需要删除的session信息的时候,我们想要删除的其实不是这个session数组,我们想要做的是删除这一切有关的信息,包括$_SESSION数组里面的信息,保存在服务器端的session文件以及保存在客户端cookie里面的sessionID,其实要删除保存在客户端的sessionID删除客户端的cookie就可以了。

下面我们来说具体情况,最简单的是你想到用unset删除$_SESSION数组,这个时候你做的仅仅是删除了$_SESSION数组,这个时候保存在服务器端的session文件没有删除,里面的信息依然完好,客户端的cookie也没有被删除,这种情况下在使用$_SESSION数组注册session信息已经不可能了,也就是说你注册的信息不会被写入session文件,在别的页面当然也就不能使用。第二种情况是你使用session_destroy()函数,这个时候你所做的其实是彻底删除了保存在服务器端的session文件,在执行session_destroy()函数以后,还可以引用$_SESSION数组里面的值,这不是期望的结果;正确的做法是我们首先通过$_SESSION数组清空保存在服务器端session文件里面的信息,然后删除客户端的cookie,然后彻底删除session即执行session_destroy()函数。

完整做法的代码:

<?php

session_start();//启用session

$_SESSION=array();//清空session文件里面的内容

if(isset($_COOKIE[session_name()])){

setcookie(session_name(),'',time()-3600,'/');//如果是基于cookie的session,删除保存在客户端的sessionID

}

session_destroy();//彻底删除session

?>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  session