2012-12-19 13 views
5

Próbuję wzmocnić moje sesje i znalazłem poniższy kod. Moje pytanie to ta linia isset($_SESSION['last_ip']) !== $_SERVER['REMOTE_ADDR'].harden sesja php - błąd porównania

Kiedy powtarzam porównanie, numery IP są takie same, ale linia kodu porównuje te dwie wartości. Jeśli porównam to jako !=, to porównanie działa. Dlaczego? Czy obie wartości nie powinny być całkowicie identyczne? Wszelkie sugestie, jak mogę to naprawić, aby były ===?

ini_set('session.cookie_httponly', true); 
session_start(); 
if (isset($_SESSION['last_ip']) === false) { 
    $_SESSION['last_ip'] = $_SERVER['REMOTE_ADDR']; 
} 
if (isset($_SESSION['last_ip']) !== $_SERVER['REMOTE_ADDR']) { 
    echo $_SESSION['last_ip'] . '/' . $_SERVER['REMOTE_ADDR']; // the output is identical 
} 
+0

Czy $ _SESSION ['last_ip'] jest w jakikolwiek sposób zmanipulowane? Jak dodane ukośniki lub dodatkowe spacje? –

+0

@PRPGFerret nie, jest dokładnie taki, jak pokazano. (zaktualizowane pytanie) –

+0

Musi istnieć NIEKTÓREJ różnicy, jeśli porównanie działa, ale identyczne nie jest. może spróbuj przyciąć obie wartości? –

Odpowiedz

11
if (isset($_SESSION['last_ip']) !== $_SERVER['REMOTE_ADDR']) { 

Ty sprawdzając, jeśli jest ustawiona, a druga odpowiada, że ​​wartość logiczna. Usuń isset.

2

Osobiście będę rozwiązywania tego operatora AND w kolejności, jeżeli takie jak:

if (isset($_SESSION['last_ip']) && $_SESSIOn['last_ip'] != $_SERVER['REMOTE_ADDR']) { 

Czy to pomaga?

+0

z tej linii 'isset ($ _ SESSION ['last_ip']) && $ _SESSIOn ['last_ip']! = $ _SERVER ['REMOTE_ADDR']' czy to jest powiedzenie, że jeśli sesja last_ip nie istniałaby to porównanie by się nie stało? –