分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 软件开发

PHP-会话控制-Session

发布时间:2023-09-06 01:37责任编辑:郭大石关键词:PHP

1.什么是Session

  上一节我们讨论到将数据以cookie的形式保存在客户端有很多弊端。为了解决这些问题就有了Session。

  Session是以文件的形式保存在服务器端的数据。

  服务器通过向客户端发送一个Cookie保存sessionid的方式,将session与客户端建立一对一的联系。

  浏览器:Cookie(sessionid)<------一一对应------>(sessionid)Session:服务器

2.开启一个会话

  session_start(); ?/*开启一个会话主要做一下两件事*/ ?/*1如果客户端有以cookie保存的sessionid,那么就将对应的session数据取到内存中*/ ?/*2如果没有,发送一个新的sessionid以cookie的形式交给客户端保存*/

   注:如果是基于Cookie的Session因为Cookie是在http头中传递的,所以session_star()和setcookie()一样在这之前不能有任何输出。

  如图,运行一遍session_start()之后在浏览器找到了一个名为PHPSESSID的Cookie

  

  我们使用下面代码打印出客户端的sessionid

  session_start(); ??echo session_id();//ldlq3n79jhkbdt120iacq19vs6

   两者的id是一致的。如果在不关闭浏览器的前提下(因为默认的是浏览器关闭时删除PHPSESSID),打开一个新的网页仍然会打印出一样的sessionid。

  如果想要更改保存sessionid的cookie保存的时间可以在配置文件中修改session.cookie_lifetime选项(以秒为单位),默认是0,表示浏览器关闭时删除。

3.Session存取数据

  PHP使用一个全局数组$_SESSION存取数据,使用起来就和普通数组一样。

  值得一提的是,内存中的数据在脚本执行完毕后就会全部销毁,所以session中的数据实际上都是要以文件的形式存到硬盘中的。而开启会话时又会把保存的数据读到内存中方便使用。

  这些操作都是有PHP自动处理的。

  

  如下,创建一个session数据

  session_start(); ???echo session_id(); ???$_SESSION[‘test‘]="this is a session";

  当代码执行完毕后会创建一个文件保存这个数据,文件名为session的sessionid。

  这个目录是通过配置文件中的session.save_path配置的,一般是‘./tmp‘。

  我的目录是"E:xampp/tmp",打开目录找到文件

    

  打开文件看一下

  

  这正是之前保存的值。

4.结束一个Session

/*第一步,开启会话,如果不开启会话PHP获得sessionid的话PHP怎么知道删除那个session呢*/ ???session_start(); ???/*第二步,session中的数据已经被读到内存中了,所以要清空它*/ ???/*注意不能用unset($_SESSION),因为我们只是想清空数据,而不是删除这个全局数组*/ ???$_SESSION=array(); ???/*第三步,删除客户端的cookie*/ ???/*注:默认的cookie名为PHPSESSID但是这个名字是可以在配置文件中通过session.name更改的*/ ??????/*所以比起使用PHPSESSID还是用session_name()函数获得cookie名稳妥一些*/ ???if(isset($_COOKIE[session_name()])) ???{ ???????setcookie(session_name(),‘‘,time()-1,‘/‘); ???} ???/*第四步,删除服务器端的文件*/ ???session_destroy();

  

5.垃圾清理机制

  假如浏览器端的cookie生命周期到了被删除以后,那么我们就没有办法用上面的方法删除保存在硬盘中的session文件了。客户端下次访问是会被分配到一个新的Sessionid,原来的文件也用不到了。

  那么这些垃圾文件怎么删除呢。

  PHP有垃圾清理机制。

  在配置文件中有三个重要选项

  session.gc_maxlifetime=  指定一个时间,以秒为单位,当垃圾清理机制启动是如果session文件的修改时间大于这个属性设置的值的话,垃圾清理机制就会删除这个文件,反之不然。

  session.gc_probability和session.gc_divisor,设S=session.gc_probability/session.gc_divisor,那么每次session_start()时有S的几率启动垃圾清理机制。

  S的值过大过小都不好,一般session.gc_probability=1,而session.gc_divisor=(1000~5000)。

 

PHP-会话控制-Session

原文地址:https://www.cnblogs.com/patermenkey/p/8306415.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved