使用不同的客户端ip丢失会话


PHP Session lost with different client ip

我在PHP中有一个奇怪的会话行为,当我通过一个有两个ip地址的平衡网关连接我的客户端到我的主机服务器。

我用cookie正确地初始化了一个会话,我设置了一个会话布尔变量,用于调试,我打印了以下信息:

    echo var_dump($_SESSION["islogged"]);
    echo var_dump(session_id());
    echo var_dump($_SERVER["REMOTE_ADDR"]);

然后我刷新了很多次页面,我得到两个结果:

bool(false) string(26) "ism1vg1de6v0b1r8b2ng337uh3" string(13) "48.129.84.146" 
bool(true) string(26) "ism1vg1de6v0b1r8b2ng337uh3" string(13) "96.19.184.38" 
bool(true) string(26) "ism1vg1de6v0b1r8b2ng337uh3" string(13) "96.19.184.38" 
bool(false) string(26) "ism1vg1de6v0b1r8b2ng337uh3" string(13) "48.129.84.146" 
bool(false) string(26) "ism1vg1de6v0b1r8b2ng337uh3" string(13) "48.129.84.146" 
bool(true) string(26) "ism1vg1de6v0b1r8b2ng337uh3" string(13) "96.19.184.38" 
...

你可以看到会话是相同的,但会话栏的变化。你知道怎么解决这个问题吗?

这是登录检查:

$ISLOGGED=!empty($_SESSION["islogged"]) 

这是登录代码:

$ISLOGGED=$_SESSION["islogged"]=$_POST["password"]==$password;

您可能正在使用suhosin,它使用远程IP地址进行额外的会话混淆。您可能需要在配置中仔细检查cryptraddr和checkraddr值。