我在我的web应用程序的页面中设置了一个简单的用户登录会话,如下所示:
if (!isset($_SESSION['username'])){
if (isset($_COOKIE['username'])){
$_SESSION['username'] = $_COOKIE['username'];
}
我开始注意到,在某些情况下,我会失去我的登录会话。我检查了cookie的过期时间,这肯定是为将来的日期设置的。该行为是相当随机的,有时复制该动作不会引起问题。
今天我发现web服务器(x2)是负载均衡的(我笨手笨脚的没有捡到这一点),现在我怀疑当用户向第二个web服务器发送请求时,cookie不存在,这个问题就会爆发。
我本以为当你击中一个web服务器时,它会与它保持会话。然而,行为却表明情况并非如此。
我还没有和网络管理员说过话。有一个神奇的解决方案,网络管理员可以整理我吗?或者这是一个实现问题?如果是这样,我该如何解决这个问题?
欢迎指教
cookie不关心哪个后端服务器处理请求,除非url改变。如果url从www1.xxx.xx
变为www2.xxx.xx
,那么您可以保存包含路径(xxx.xx)的cookie,并且两个子域都可以看到cookie。
另一件更有可能出错的事情是会话不在两个服务器之间共享。可以使用memcached