0

我在让用户登录我为某人构建的网站时遇到问题。无论我用于登录的帐户如何,它都按预期对我有用,但是当询问人们它是否对他们有用时,答案一致是否定的。甚至我家的其他机器也无法登录。这是每个页面上包含的代码。

//maintain session
session_start();
//"renew" session for 3 more days
ini_set('session.cookie_lifetime', 60*60*24*3);
ini_set('session.gc_maxlifetime', 60*60*24*3);
//check if session data corresponds to data in SQL
if(isset($_SESSION["username"]) 
&& isset($_SESSION["password"]) 
&& isset($_SESSION["authkey"])) {
    $verifyuser = $db->prepare("
        SELECT *
            FROM users
            WHERE username = :user
            AND password = :password
            AND authkey = :authkey
    ");
    $verifyuser->execute(array(
        ':user' => $_SESSION["username"],
        ':password' => $_SESSION["password"],
        ':authkey' => $_SESSION["authkey"]));
    //if use doesn't exist, rowCount() will be 0
    if($verifyuser->rowCount() != 1) {
        session_destroy();
    }
}
//if IP stored in session doesn't match current IP, kill session
if(isset($_SESSION['ip'])){
    if($_SESSION['ip'] != $_SERVER['REMOTE_ADDR']) {
        session_destroy();
    }
}

登录页面似乎工作正常(插页式 login-submit.php 页面回显登录成功),但无论如何它都在下面。

//posted from login.php
$username = $_POST["name"];
$password = $_POST["pass"];
//check SQL for user
$grabb = $db->prepare("
    SELECT username
        FROM users
        WHERE username = :username
");
$grabb->execute(array(
    ':username' => $username));
if($grabb->rowCount() == 1) {
    $grabusername = $grabb->fetchColumn();
    $pahash = crypt($password, $grabusername);
}
$logcheck = $db->prepare("
    SELECT *
        FROM users
        WHERE username = :username
        AND password = :pahash
");
$logcheck->execute(array(
    ':username' => $username,
    ':pahash' => $pahash));
//if everything is golden, initialize pertinent info into session
if ($logcheck->rowCount()==1) {
    $_SESSION["username"] = $username;
    $_SESSION["password"] = $pahash;
    $_SESSION["authkey"] = $logcheck->fetchColumn(12);
    $_SESSION['ip'] = $_SERVER['REMOTE_ADDR'];
}

我只是不明白为什么它在这台本地机器上对我有用,但在其他机器上却没有。对于其他所有人,它说登录成功,然后在重定向时显示他们没有登录。会话没有为我以外的人存储,我不知道为什么。

该网站的现场版本可以在这里看到。我已经设置了一个虚拟帐户(a / a)用于测试目的。

我试过注释掉一些代码(比如第一个代码块中的 IP 检查,以及 php.ini 行之后的整个第一个代码块),但它似乎没有做任何事情。

4

1 回答 1

1

问题最终出现在<!DOCTYPE html>之前session_start();,导致会话数据没有在页面之间维护。

于 2013-10-03T05:41:32.217 回答