Solo cookie; ovviamente, non c'è nulla che ti impedisca di fare questo:
if (empty($_SESSION['ip']) {
$_SESSION['ip'] = $_SERVER['REMOTE_ADDR'];
} else {
if ($_SESSION['ip'] != $_SERVER['REMOTE_ADDR']) {
// IP changed
}
}
Si noti che l'identificazione di un utente tramite l'indirizzo IP è solo una misura di stopgap e non la considererei rilevante per la sicurezza, ad es. le grandi organizzazioni utilizzano NAT, quindi appariranno più computer con lo stesso indirizzo su Internet in generale. Al contrario, ad es. l'indirizzo IP degli utenti mobili può cambiare spesso, quindi non assumere automaticamente "stesso indirizzo IP == stesso utente, diverso indirizzo IP == utente diverso".
Ulteriori preoccupazioni: IPv4 e IPv6 dual-stack, estensioni per la privacy IPv6, ecc.