【发布时间】:2011-09-21 19:11:51
【问题描述】:
我使用 $_SESSION 对用户进行身份验证,但我也在考虑在会话中存储其他变量。但是,我不知道有多少会话可能会使用服务器上的资源。我的意思是在每个页面上都有 session_start() 是否有害,因为即使不需要会话也会启动?
每次访问都开始会话是好是坏还是中性?
【问题讨论】:
标签: php performance session resources
我使用 $_SESSION 对用户进行身份验证,但我也在考虑在会话中存储其他变量。但是,我不知道有多少会话可能会使用服务器上的资源。我的意思是在每个页面上都有 session_start() 是否有害,因为即使不需要会话也会启动?
每次访问都开始会话是好是坏还是中性?
【问题讨论】:
标签: php performance session resources
一般来说,在您看到您的网站开始抓取之前不要担心优化。
在每个页面上使用 session_start() 一点也不有害,事实上它对于使用身份验证的网站来说是相当标准的。
【讨论】:
是的,session_start() 会消耗资源。然而,除非你的网站有大量的流量,否则你会注意到。并且存储会话数据的替代方法几乎都难以实现,并且往往具有有趣的故障模式。
我建议的唯一一件事是小心您在会话中添加的内容 - 即使流量水平较低,大量数据也会产生显着影响。典型的错误是不小心将业务逻辑层的整个对象树加载到会话状态中。
例如,假设您正在构建一个购物车;当客户点击“添加到购物篮”时,您想记住他们添加的商品。因此,您可以将商品的唯一 ID 添加到会话中,但是每次展示购物篮时都必须查找价格和描述,这很麻烦。因此,您决定将代表该项目的对象加载到您的会话中。该对象包含价格和描述,还包含商品的类别 - 以及该类别中的所有其他商品,因为您的应用程序没有使用延迟加载。所以现在,您购物篮中的每件商品还包含成百上千的其他物品;在您知道自己在哪里之前,您已经将几乎整个数据库加载到会话中。
【讨论】: