【问题标题】:Does PHP store sessions individually or in shared memory?PHP 是单独存储会话还是在共享内存中存储会话?
【发布时间】:2017-05-06 06:24:39
【问题描述】:

假设我有一个网站,它在启动时写入数据库。如果多个用户同时登录该网站,是否意味着它将尝试向数据库写入 N 次,其中 N = 用户数?有没有办法强制 PHP 仅在连接断开时才写入数据库(仅在所有其他用户当前不在网站上时才写入)?您建议采用什么方法来减少对数据库的过多写入或请求的可能性?

【问题讨论】:

  • 取决于服务器配置,但 PHP 的默认设置是将会话写入硬盘驱动器上的文件,而不是写入数据库。
  • Is there any way to force PHP to only write to the database if the connections are disconnected (only write if all other users are currently not on the website)? - 我几乎不怀疑。服务器将如何跟踪需要稍后插入的所有未决数据?假设有 1M 用户数据需要稍后插入。就我而言,数据插入必须是即时的。

标签: javascript php memory redis session-cookies


【解决方案1】:

首先,PHP 默认使用会话文件。这些文件是在每个浏览器(又名用户)第一次调用session_start(); 时创建的。之后,相同的文件将用于用户的后续session_start();,直到他们关闭浏览器。但是,当客户端关闭浏览器时,会话文件不会从服务器中清除,因为它们具有 PHP 定义的生命周期。

如果您试图确定是否所有会话都已过期(由于所有会话都已过期,因此没有客户端连接),您需要清除 PHP 垃圾收集器尚未找到的会话文件,扫描会话目录中的任何文件,并且如果目录中不存在会话文件,则可以假设站点上没有活动用户。

请注意,如果您使用内存模块,例如:php-redis 来存储会话,则需要将检查会话所需的路由从文件更改为用于检查会话的任何处理程序。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-05
    • 1970-01-01
    • 1970-01-01
    • 2013-09-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多