关于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的销毁,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
?>
相关文章推荐
- 有关于request,session的几个问题[总结网络搜集的一些资料]
- 关于java web中session的一些注意事项与总结
- 关于ASP.NET在IIS一些问题的经验总结
- 关于ASPNET在IIS一些问题的经验总结
- 关于ASP.NET在IIS一些问题的经验总结
- EMF的一些总结(1)——关于Packages and Factories
- 关于MD5码的一些自我总结
- 关于ASP.NET在IIS一些问题的经验总结
- 关于JAVA垃圾收集器与类的finalize()方法的一些总结
- 关于手机的IMEI号问题的一些总结
- 关于ASP.NET在IIS一些问题的经验总结
- EMF的一些总结(2)——关于EMF的序列化
- 关于ASPNET在IIS一些问题的经验总结
- 关于session的一些问题
- 关于PHP操作文件的一些FAQ总结
- 关于JSP Commons FileUpload 组件上传文件的一些总结
- 这是我们公司总结的一些关于中文乱码问题的一些解决方案和经验和大家分享!
- OGRE·Irrlicht·初印象·及与古老意念关于不变性和可变性程度的讨论的一些总结
- 【转贴】关于ASPNET在IIS一些问题的经验总结
- 关于asp.net Session丢失问题的总结