【问题标题】:What are the alternative to PHP session variables?PHP会话变量的替代方法是什么?
【发布时间】:2012-07-13 00:42:47
【问题描述】:

我正在编写一个全新的网站,如果我必须在多台机器上使用负载平衡器托管网站,我想确保它能够轻松扩展。

可以对网站的用户进行身份验证。换句话说,我需要维护一些状态信息。我的第一个反应是使用 Session 变量,但随后我将被限制在一台机器上。我知道有一些方法可以将会话变量存储在外部(在数据库、redis、memcached 中),但这是唯一的选择吗?

会话变量的替代方法是什么? Facebook 和其他大型网站是如何做到这一点的?

附:我不是在寻找另一个会话处理程序(DB、redis 等)。我想知道是否有办法完全摆脱会话变量。

【问题讨论】:

  • 这是一个很好的问题,但如果我可以提供一条不请自来的建议:在许多情况下,最好在项目的早期阶段完全不用担心扩展。除非您正在做一些真正不寻常的事情,否则我认为会话存储不太可能成为瓶颈。
  • 我明白你的意思,Eli。但我并不担心会话变量会成为瓶颈……我只是想确保服务可以在没有太多工作的情况下扩展。看起来会话变量是要走的路。我希望在 2012 年有更好的方法来做到这一点......我很想知道 StackOverflow 是如何做到的......

标签: php session-variables


【解决方案1】:

听说过session_set_save_handler吗?它允许您使用默认 PHP 会话处理程序(将 sess_xxxxxxxxxxxx 文件写入 tmp 目录中的一种)以外的机制。

您可以编写自己的使用数据库的会话处理程序。这可能是一项耗时的任务;因此您可以暂时使用默认的 PHP 会话处理程序,并在准备好时透明地切换到数据库。除了实现和插入您的六个会话处理函数的版本之外,您可能不需要重写任何代码。

【讨论】:

  • 宾果游戏。为了进一步回答这个问题,这就是 Facebook 所做的事情(通过 memcached、IIRC)。
  • 谢谢ceejayoz!某处是否有文章记录了这一点?我很惊讶地知道 Facebook 使用会话变量...
  • 知道这一点为什么会让您感到惊讶?它们对于社交网络几乎可以做的任何事情(例如登录状态)都是必需的。
【解决方案2】:

您可以查看缓存,例如使用 Zend cacheAPC cache

【讨论】:

  • 如果您至少可以链接到描述如何使用这些文档在每个用户的基础上共享状态信息的文档,那将会很有用。
猜你喜欢
  • 2011-12-08
  • 1970-01-01
  • 2018-01-15
  • 1970-01-01
  • 2012-05-29
  • 2018-09-10
  • 1970-01-01
  • 2021-07-25
  • 1970-01-01
相关资源
最近更新 更多