我在让用户登录我为某人构建的网站时遇到问题。无论我用于登录的帐户如何,它都按预期对我有用,但是当询问人们它是否对他们有用时,答案一致是否定的。甚至我家的其他机器也无法登录。这是每个页面上包含的代码。
//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 行之后的整个第一个代码块),但它似乎没有做任何事情。