PHP会话现在还在使用吗?

Ric*_*ard 2 php session

是否有更现代的PHP会话替代方案,还是PHP会话仍然是存储信息的主要选择?我读到这个:https://pasztor.at/blog/stop-using-php-sessions.我还在学习PHP,坦白说,我很无能为力.

gvi*_*iew 5

你的第一个假设不正确.PHP会话不是存储数据的地方.数据库,文件,文档存储等是存储数据的地方.

会话"数据"只是序列化形式的$ _SESSION数组中包含的变量.您可以对变量运行serialize()和unserialize(),以深入了解这些变量.

在您的脚本中,一旦使用session_start()启动会话,当您在$ _SESSION中添加更改或删除变量时,php会对此进行序列化并将其存储.

一旦会话存在,并且用户发出另一个被识别为同一用户(具有相同会话ID)的请求(通常通过cookie传递给客户端),那么在发出session_start()时,PHP会读取序列化数据.会话文件,并将其反序列化,并将其存储回$ _SESSION.

默认情况下,PHP会将单个会话数据存储为文件系统上的文件.对于中小型应用程序,这是高性能的.

所以要明确的是,人们在PHP会话中存储的内容基本上是从您可能拥有的任何其他持久存储中读取的变量,这样您就可以避免执行重新查询数据库以获取名称和user_id等已经存在的用户登录到您的应用程序.

它不是该数据的主版本,也不是更改该数据时更新数据的位置.这将是原始数据库或mongodb集合.

您发布的文章有许多陈述和未说明的假设,包括:

  1. Devops/Sysadmins决定重新配置PHP应用程序以更改会话处理程序(误导/错误)
  2. 部署涉及负载均衡器(可能)
  3. 负载均衡器不支持或使用粘性会话

然后,他详细介绍了几种允许共享会话处理程序解决他描述的竞争条件的替代方案

正如您所说,您还不清楚会话实际是什么,或者它们如何工作或它们为您做了什么.了解PHP脚本的重要一点是它们与单个请求相关联,而会话是不重复昂贵的数据库读取的一种方式.它本质上是可变缓存,供PHP(或不适用)在适合您的设计时使用.

在您拥有集群的时刻,正如文章中所指出的,人们经常将数据存储到共享资源中,共享资源可以是关系数据库,也可以是许多其他后端中的任何一个,每个后端都具有与其目标相匹配的不同属性.

同样,为了更改会话处理程序,通常会进行代码更改以实现所需的会话处理程序功能,并且有一些方法可以缓解您发布的文章中出现的问题,几乎每个持久性产品人们用的.

最后但并非最不重要的是,所描述的问题在任何程度上都存在于几乎任何集群服务器端进程中,并且不是PHP或其会话机制所特有的.