好的,我已经为 app/config/config.php 编写了这个函数:
$config['sess_match_ip'] = match_ip(3);
// $range sets -+ of the last numbers
function match_ip ($range){
session_start();
$IP = $_SERVER['REMOTE_ADDR'];
$IP_parts = explode(".", $IP);
if (isset($_SESSION['mi'])){
//If the last part is the same, match IP
if ($_SESSION['mi'] == $IP_parts['3']){
return TRUE; // SAME IP doesn't cause the problem, therefore TRUE
}
// If the last ending($_S[mi]) is +- 3, IP is dynamic, therefore FALSE
if (($IP_parts['3']-$range <= $_SESSION['mi']) && ($_SESSION['mi'] <= $IP_parts['3']+$range)) {
return FALSE;
}
else{
return TRUE;
}
}
// If session not set, set it.
else{
$_SESSION['mi'] = $IP_parts['3'];
}
}
我知道 ip6v 的问题,但出于我的目的,这应该可行。关于安全性 - 归根结底,我将某些内容存储在未加密的会话中。但是 IP 地址真的很容易伪造,因此即使 ['sess_match_ip'] = TRUE 也没有关系,如果有人试图破解你的会话。但我喜欢打开这个功能。
如果您想使用此代码,请对 $range 的大小进行更多研究。我的手机范围是+-2。但实际范围可能有所不同。如果您发现,请在此处发布。