PHP会话变量的替代方案有哪些?

5
我正在编写一个全新的网站,我希望它可以轻松扩展,以便将来如果我必须在多台机器上使用负载均衡器托管该站点。
网站用户可以通过身份验证。换句话说,我需要维护一些状态信息。我的第一个反应是使用Session变量,但是那样我只能受到单台机器的限制。我知道有几种方法可以将Session变量存储在外部(如DB、redis、memcached)中,但这是唯一的选择吗?
有哪些替代Session变量的方法?Facebook和其他大型网站是如何做到这一点的?
附言:我不想寻找另一个会话处理程序(如DB、redis等)。我想知道是否有一种完全摆脱Session变量的方法。

2
这是一个很好的问题,但如果我可以提供一些未经请求的建议:在项目的早期阶段,许多情况下最好不要担心扩展性。除非你正在做一些真正不寻常的事情,否则我认为会话存储不太可能成为瓶颈。 - Eli
我明白你的观点,Eli。但我并不担心会话变量成为瓶颈的问题...我只是想确保服务能够在不太费力的情况下扩展。看起来会话变量是可行的方法。我希望在2012年有更好的方法来解决这个问题...我很想知道StackOverflow是如何做到的... - Martin
2个回答

8
你听说过 session_set_save_handler 吗?它允许你使用除默认PHP会话处理程序(在tmp目录中写sess_xxxxxxxxxxxx文件的处理程序)之外的机制。
你可以编写自己的会话处理程序来使用数据库。这可能是一个耗时的任务;因此,您可以暂时使用默认的PHP会话处理程序,并在准备好时透明地切换到数据库。您可能不必重写任何代码,只需实现并插入您的六个会话处理函数版本即可。

太棒了。进一步回答这个问题,这就是Facebook所做的事情(通过memory cache)。 - ceejayoz
谢谢您,ceejayoz!有没有一篇文档记录这个?我很惊讶得知Facebook使用会话变量... - Martin
你为什么会感到惊讶呢?这些对于社交网络的几乎所有功能都是必要的,例如登录状态。 - ceejayoz

1

1
如果您至少能够链接到描述如何使用这些内容在每个用户基础上共享状态信息的文档,那将非常有用。 - Quentin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接