2013-10-12 43 views
0

因此,我正在根据当前会话检查会话IP。我看了一下可能有我的答案的问题,但他们都没有答案。检查会话IP是否与当前IP匹配 - PHP

会发生什么情况是,每次我连接,我得到“您的IP不匹配......”

<?php 
if (isset($_SESSION['ip']) and (strcmp($_SESSION['ip'], md5($_SERVER['REMOTE_ADDR'])))){ 
    echo "Your IP doesn't match your session, your IP: ". $_SERVER['REMOTE_ADDR'] ." and your session IP: ". $_SESSION['ip']. ". <a href='/scripts/signout.php'>Click here to log out.</a>"; 
    die; 
} 
?> 

我知道使用HTTPX和落实有我解决这个问题了。 另外$ _SESSION [ 'IP']是要比较会话的IP和IP地址的MD5的MD5(当前IP)

+0

不需要md5。并且它不会在错误消息中始终如此使用。否则这种安全性可能会导致有效用例的问题。 (代理服务器场后面的用户) –

+1

['strcmp()'](http://www.php.net/manual/en/function.strcmp.php)返回0,如果两个字符串相等,并且零是一个falsy值,所以如果他们匹配,你的'if()'不符合。您需要测试'!== 0' –

+0

跟踪会话中IP的更改没有任何安全优势,并且它是完全有效的IP协议,用于更改IP。 – cgTag

回答

1

,所以也许你需要:

<?php 
if (isset($_SESSION['ip']) and ((strcmp($_SESSION['ip'], $_SERVER['REMOTE_ADDR']) !== false))){ 
    echo "Your IP doesn't match your session, your IP: ". $_SERVER['REMOTE_ADDR'] ." and your session IP: ". $_SESSION['ip']. ". <a href='/scripts/signout.php'>Click here to log out.</a>"; 
    die; 
} 
?> 
+0

'<0',不是===错误,因为您是从错误评论复制的。 –

+0

其实'!== 0' –

1

strcmp返回0,如果字符串匹配,并在PHP中,将等于假,也不需要真正的MD5电话。

<?php 
if (isset($_SESSION['ip']) && strcmp($_SESSION['ip'], $_SERVER['REMOTE_ADDR']) !== 0){ 
    echo "Your IP doesn't match your session, your IP: ". $_SERVER['REMOTE_ADDR'] ." and your session IP: ". $_SESSION['ip']. ". <a href='/scripts/signout.php'>Click here to log out.</a>"; 
    die; 
} 
//or you can just go 

if(isset($_SESSION['ip']) && $_SESSION['ip'] !== $_SERVER['REMOTE_ADDR']) { 
/// stuff 
}