2013-10-12 44 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 
}