PHP锁定了ip地址

时间:2013-04-09 10:03:13

标签: php

我锁定了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();  
}

3 个答案:

答案 0 :(得分:13)

如果用户的IP地址发生变化,此代码将删除会话(注销)。

因此,用户可以从任何IP地址登录,但如果更改,则会被注销。

这可以防止会话劫持,但是如果您使用的是动态IP,它将无法正常工作,因为您的IP将不断变化。

答案 1 :(得分:8)

确实如此。如果用户的IP发生变化,他将被注销。虽然攻击者仍然可以模仿IP,但如果他知道,那么它就不是完全安全的。有关如何防止会话劫持的更多信息,请查看这些页面:

我也强烈推荐Chris Shiflett。关于会话劫持的文章可以在这里找到:

http://shiflett.org/articles/session-hijacking

答案 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();  
}