来自同一个IP地址的{php}会话

时间:2016-02-01 18:12:19

标签: php session

今天去了一个客户的地方工作,真的搞砸了。以下是发生的事情的简要历史。

我为客户创建了一个简单的cms,通常在我去客户之前,我自己测试了一切,localhost没有任何问题。

当我将网站转移到真正的主机并开始在客户的位置进行测试时,发生了2件奇怪的事情(我不得不说我们都被电缆连接到同一个路由器上,所以我们都外部IP地址必须相同):

  • 首先,当我使用chrome登录cms时,突然之间Firefox也登录了,而且我没有登录Firefox。

  • 最奇怪的是,客户在某个时刻也登录了它似乎没有从她的电脑登录过来......

发生的事情是,某些工具栏只显示在"管理员模式"突然间被添加了#34;通过我可能完成的保存来查看真实的页面内容。

我认为我们都以某种方式使用相同的会话ID或类似的东西,它搞砸了我的代码/ cms。

以下是我目前用于loggins的代码:

我首先在页面顶部显示:

if(!isset($_SESSION)){
session_name("sitesession");
session_set_cookie_params(0);
session_start();
}
// make sure user login attempts are no more than 3 times
if (!isset($_SESSION['ip'])){
$_SESSION['ip'] = $_SERVER['REMOTE_ADDR'];
}
if (!isset($_SESSION['logintriesleft'])){
$_SESSION['logintriesleft'] = 3;
}

然后在页面中,我" require_once"登录脚本中包含以下内容:

if (isset($theaction) and ($theaction=="adminlogin")){
$email = $_REQUEST['email'];
$magickey = $_REQUEST['magickey'];

$sth = $DB_con->prepare('SELECT magickey FROM admin_users WHERE email = :email LIMIT 1');

$sth->bindParam(':email', $email);

$sth->execute();

$user = $sth->fetch(PDO::FETCH_OBJ);

if (is_null($user->magickey) || hash_equals($user->magickey, crypt($magickey, $user->magickey))==false) {
  $_SESSION['logintriesleft'] = --$_SESSION['logintriesleft'];
  if ($_SESSION['logintriesleft'] > 0){
    echo '<script>javascript:alert("Bad Login ('.$_SESSION['logintriesleft'].' more tries left before getting banned)...Please Try Again");</script>';
    echo '<script>javascript:location.replace("'.$_SESSION['baseurl'].'");</script>';
  }else{
        echo '<script>javascript:alert("Too many bad login attempts. Contact the website administrator to reactivate your account");</script>';
    echo '<script>javascript:location.replace("http://google.ca");</script>';
  }
}
else {
  $_SESSION["admin"] = "true";
  $_SESSION["edit_content"] = "true";
    echo '<script>javascript:alert("Successful login! Redirecting you back to the main page!");</script>';
    echo '<script>javascript:location.replace("'.$_SESSION['baseurl'].$_SESSION['currentpage'].'");</script>';
    break;
}
}
?>

我的退出代码是这样的:

case "logout":
$_SESSION = array(); // unset all of the session variables
// also delete the session cookie. This will destroy the session, not just the session data!
if (ini_get("session.use_cookies")) {
    $params = session_get_cookie_params();
    setcookie(session_name(), '', time() - 42000,
        $params["path"], $params["domain"],
        $params["secure"], $params["httponly"]
    );
}
// Finally, destroy the session.
session_destroy();
echo '<script>javascript:alert("Your are now logged out. Goodbye!");</script>';
echo '<script>javascript:location.replace("//www.google.ca");</script>';
break;

我认为我的第一段代码可能在查找用户的IP地址时有问题,但我不确定。就像我说的那样,直到我们两个人在同一台路由器上访问外部主机上的网站时,我才会遇到任何此类问题。

任何可能出错的想法?​​

感谢您的帮助。

0 个答案:

没有答案