我锁定了ip地址。
这是否意味着用户只能使用相同的IP地址登录?或者用户是否会注销并且必须重新登录才能获得新会话?
if (isset($_SESSION['last_ip']) === false) {
$_SESSION['last_ip'] = $_SERVER['REMOTE_ADDR'];
}
if ($_SESSION['last_ip'] != $_SERVER['REMOTE_ADDR']){
session_unset();
session_destroy();
}
答案 0 :(得分:13)
如果用户的IP地址发生变化,此代码将删除会话(注销)。
因此,用户可以从任何IP地址登录,但如果更改,则会被注销。
这可以防止会话劫持,但是如果您使用的是动态IP,它将无法正常工作,因为您的IP将不断变化。
答案 1 :(得分:8)
确实如此。如果用户的IP发生变化,他将被注销。虽然攻击者仍然可以模仿IP,但如果他知道,那么它就不是完全安全的。有关如何防止会话劫持的更多信息,请查看这些页面:
我也强烈推荐Chris Shiflett。关于会话劫持的文章可以在这里找到:
答案 2 :(得分:1)
if (isset($_SESSION['last_ip']) === false) {
$_SESSION['last_ip'] = $_SERVER['REMOTE_ADDR'];
}
以上代码表示如果尚未创建会话“last_ip”,则会创建会话并存储用户当前ip的值。
if ($_SESSION['last_ip'] != $_SERVER['REMOTE_ADDR']){
session_unset();
session_destroy();
}
上面的代码表明如果“last_ip”的会话值不等于你当前的ip,它将释放所有会话变量(session_unset)并销毁注册到会话的所有数据(session_destroy)。
让我们描述一下真实场景。
e.g。我先访问你的网站 代码块存储我当前的ip。现在我的互联网断开了 然后我重新连接到启用了dhcp的isp并给了新的ip 我。因此,如果再次访问您的网站,第二个代码块会检查我有不同的IP,因此它会将我注销。
另外编辑你的第二个代码块,这样如果还没有创建会话“last_ip”,它就不会抛出php通知。
if (isset($_SESSION['last_ip']) && $_SESSION['last_ip'] != $_SERVER['REMOTE_ADDR']){
session_unset();
session_destroy();
}