PHP使用session_start()会生成一个空的session文件

今天在开发一个后台管理程序,访问路径是:

你的域名/admin/index.php

 

由于这是一个后台管理程序,后台有大量的“post表单数据提交”操作,为了防止一些恶意提交数据、CSRF(跨站请求伪造)、表单重复提交数据......等等。需要使用“token”,关于token的作用及原理这里就不多讲了。

 

由于需要使用“token”的地方很多,我就把:

session_start()

放在了 index.php 这个入口文件。

 

然后,我发现了一个问题,就算我用:

session_unset();
session_destroy(); //删除session所有资源,包括session存储文件

彻底销毁了session,删除session所有资源,包括session存储文件。

 

由于 index.php 是入口文件,不管你访问哪个页面?只要你访问了 index.php ,也就是PHP代码走了 session_start() 这行代码,就会给你分配一个0KB的session空文件。

示例如下:

我分别用谷歌、QQ、IE浏览器访问了 /admin/index.php,结果如下:

开启session_start()会生成一个0kb的session空文件

 

我们暂时先不考虑:

session.gc_maxlifetime 指定过了多少秒之后session数据就会被视为 "垃圾" 并被清除。

试想一下,如果有十万个人都来请求这个URL,是不是就会分配十万个0KB的session空文件呢?就算是0KB,也会占服务器相应的资源吧!这就是为什么大项目需要单独搞session服务器了。

 

解决思路也很简单:

1、我不把 session_start() 这行代码放 index.php 这个主文件就行了呗!

2、哪个文件需要,我就去哪个文件再开启session_start(),然后再销毁删除。这样虽然麻烦,但是,至少会避免一些少生成0KB的session空文件。

3、如果不是很重要的东西,完全可以用 $_COOKIE,像我这种token类似的功能,完全可以用cookie。

 

总结:

虽然说PHP也用了很多年了,也开发过不少项目,以前只知道随意用 session_start() ,具体这些背后的东西也没怎么观察过,更没有了解过,今天特意分享给大家一下。

    A+
发布日期:2020年10月12日 13:13:03  所属分类:PHP
最后更新时间:2020-10-19 09:32:38
付杰
  • ¥ 69.0元
  • 市场价:69.0元
  • ¥ 98.0元
  • 市场价:198.0元
  • ¥ 49.0元
  • 市场价:199.0元
  • ¥ 49.9元
  • 市场价:99.9元

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: