下面我们来了解一下Session的实现和工作原理:
浏览器和服务器采用http无状态的通讯,为了保持客户端的通讯状态,就要使用session来达到这个目的。
首先要将客户端和服务端联系起来,而每个客户端都有一个唯一的标识,建立唯一标识的方法只有两种:cookie和GET
session是服务器端和客户端保持用户会话数据的一种方法,对应的cookie是用来保存客户端的用户会话数据。
PHP使用session是会建立一个“PHPSESSID”的cookie(可以通过php.ini修改session.name值指定),如果客户端禁用cookie,也可以使用GET来把session_id传到服务器上。
session影响系统性能:
一般情况下,php.ini里的session.save_handler默认是file,也就是用文件来保存session,这种方式有几个缺点:
1.如果单靠session自己的垃圾回收机制,时间久了,保存session的文件会越来越多,影响查找效率;
2.对于需要统计同时在线用户的系统,实现起来很不方便;
3. 分布式系统难以共享session。
建议:
1、以数据库来保存session,数据库的连接方式可以采用PDO;
2、定期清除session,一个是清除服务器端的session文件,还有一个是清除客户端的cookie信息。
因为两者都各保存着一半的信息。
PHP的相关Session常用函数
session_start() : 启动session,这个没什么说的了。根据session ID打开session文件,如果没有session ID就创建一个ID和对应的session文件
$SESSION[]数组 :
存放用户信息的全局数组,session文件中除了存放$SESSION中的数据实际也会存放其他的信息,如id等
sessionunset() :
清空$SESSION数组,它是把数组里的值清空了,而$SESSION这个变量还是存在的,和unset($SESSION)是完全不同的概念
sessioncommit() :
提交session数据并结束session,把$SESSION数据写到文件里并结束session,实际上当一个页面执行结束后,php会自动执行与这个函数相同的操作。所以这个函数也很少能用上
session_destroy() :
注销session,这个就是关闭session并删除掉相应的session文件了。切断了客户端和服务端的联系。
转载声明:本站文章除注明转载外,均为本站原创或编译。欢迎任何形式的转载,但请务必注明出处,尊重他人劳动。
欢迎捐赠赞赏