因此,对于一个学校项目,我试图创建一个登录页面,以便用户登录时能够看到其他页面。到目前为止,我可以让用户创建一个帐户并从数据库中获取数据。但是,当我刷新页面以转到其他页面所在的其他.php文件时。他似乎没有保存会话,因此他继续加载“基本”页面。我是这一切的新手,我正在尝试学习。但是此刻我退出了。任何帮助将不胜感激!
我有我的索引页,我在其中区分要加载的哪一页。 如果用户未登录,则转到header.php。如果他已成功登录,则应转到headerlogin.php。那就是我被困住的地方。我已经建立了数据库,一切正常。
索引
<!-- Wrapper -->
<div id="wrapper">
<!-- Header -->
<?php
//if user is not logged in show :
if(!isset($_SESSION["user"])){
$headerSentence = "Belgian Urban Exploring ";
include('header.php');
} else { //if user is logged in show :
$headerSentence = "Welcome " . $_SESSION["user"] . "!";
include('headerlogin.php');
}
//if user is logged in and not admin show :
//else show :
?>
标题
<div class="modal-dialog modal-dialog-centered" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="exampleModalCenterTitle">Log in: </h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">×</span>
</button>
</div>
<div class="modal-body">
<form action="dologin.php" id="loginForm" method="POST">
<h4 id="userCreationMsg"></h4>
<div class="input">
<span id="loginError" class="SpecialRed"></span>
<label for="username">Username:</label>
<input type="text" name="username" id="loginUsername" value="<?php $valuesLogIn["username"] ?>">
</div>
<div class="input">
<label for="username">Password:</label>
<input type="password" name="password" id="loginPassword" value="<?php $valuesLogIn["password"]?>">
</div>
<div>
<span class="specialRed loginErrorMessage"></span>
</div>
<div class="input">
<input type="submit" id="submitLogin" value="logIn">
</div>
<div>
<input type="text" name="staylogged" placeholder="Write 'OK' if u want to stay logged in" value="<?php $valuesLogIn["stayloggedin"]?>">
</div>
</form>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-primary" id="btn-signup">Don't have an account? Sign up here</button>
<button type="button" class="btn btn-secondary close-btn" data-dismiss="modal">Close</button>
</div>
</div>
</div>
</div>
dologin
if($_SERVER['REQUEST_METHOD'] == 'POST') {
if(isset($_POST["username"]) && isset($_POST["password"])){
include_once "database/UserDB.php";
$password = $_POST["password"];
$hashed_password = hash("SHA512", $password);
$result = UserDB::checkUserLogin($hashed_password, $_POST["username"]);
if($result->username == $_POST["username"]){
$data["success"] = true;
}
} else { $data["error"] = "Not al values are set";}
} else {
$data["error"] = $_POST . "has no value";
}
if($result == true) {
session_start();
$_SESSION["user"] = $_POST["username"];
$_SESSION["userid"] = $result->userId;
if (isset($_POST["staylogged"])) {
if ($_POST["staylogged"] === "OK") {
//16years
setcookie("UserIdCookie", $result->userId, time() + 60 * 60 * 24 * 6004, "/");
setcookie("UserCookie", $result->username, time() + 60 * 60 * 24 * 6004, "/");
} else {
//3hours
setcookie("UserIdCookie", $result->userId, time() + 60 * 60 * 2, "/");
setcookie("UserCookie", $result->username, time() + 60 * 60 * 2, "/");
}
}
}
echo json_encode($data);
?>
任何有用的信息都会有所帮助。理想的情况是有人可以告诉我为什么他不加载headerlogin.php。
答案 0 :(得分:0)
首先,请执行以下常规检查:
session_start();
。因此,一个安全的选择是将其放在页面的开头,紧接着在打开<?php
声明之后,再放在其他任何地方。此外,请确保在打开<?php
声明之前没有空格/制表符。header
重定向之后,使用exit();
结束当前脚本(其他人也建议使用session_write_close();
和session_regenerate_id(true)
,您也可以尝试使用这些脚本,但是我想使用exit();
)register_globals
已关闭,您可以在php.ini
文件上进行检查,也可以使用phpinfo()
进行检查。有关如何关闭它的信息,请参阅[this] [1]。$_SESSION
超全局数组中的键不会在任何地方被覆盖www.yourdomain.com
重定向到yourdomain.com
不会继续进行会话。.php
(确实如此!)