php - 全局 $_SESSION 变量
问题描述
我一直在关注Dani Krossings 登录系统,这是一个很棒的教程,正是我正在寻找的,只有一件事我正在努力解决。
登录后,标题不会刷新。登录后,标题应更改为 ...Profile Page, Logout。我的代码保留为注册,登录。就像 $_SESSION 变量没有到达标题一样。但是,如果在登录后,我选择了注册或登录链接,则标题会更改为应有的内容。
功能码
function uidExists($conn, $username) {
$sql = "SELECT * FROM users WHERE usersUid = ? OR usersEmail = ?;";
$stmt = mysqli_stmt_init($conn);
if (!mysqli_stmt_prepare($stmt, $sql)) {
header("location: ../signup.php?error=stmtfailed");
exit();
}
mysqli_stmt_bind_param($stmt, "ss", $username, $username);
mysqli_stmt_execute($stmt);
// "Get result" returns the results from a prepared statement
$resultData = mysqli_stmt_get_result($stmt);
if ($row = mysqli_fetch_assoc($resultData)) {
return $row;
}
else {
$result = false;
return $result;
}
mysqli_stmt_close($stmt);
}
function loginUser($conn, $username, $pwd) {
$uidExists = uidExists($conn, $username);
if ($uidExists === false) {
header("location: ../login.php?error=wronglogin");
exit();
}
$pwdHashed = $uidExists["usersPwd"];
$checkPwd = password_verify($pwd, $pwdHashed);
if ($checkPwd === false) {
header("location: ../login.php?error=wronglogin");
exit();
}
elseif ($checkPwd === true) {
session_start();
$_SESSION["userid"] = $uidExists["usersId"];
$_SESSION["useruid"] = $uidExists["usersUid"];
header("location: ../index.php?error=none");
exit();
}
}
头文件.php
<?php
session_start();
include_once 'includes/functions.inc.php';
?>
<!DOCTYPE html>
<html lang="en" dir="ltr">
<head>
<meta charset="utf-8">
<title>PHP Project 01</title>
<!--I won't do more than barebone HTML, since this isn't an HTML tutorial.-->
<link href="https://fonts.googleapis.com/css2?family=Roboto:ital,wght@0,100;0,300;0,400;0,500;0,700;0,900;1,100;1,300;1,400;1,500;1,700;1,900&display=swap" rel="stylesheet">
<link rel="stylesheet" href="css/reset.css">
<link rel="stylesheet" href="css/style.css">
</head>
<body>
<!--A quick navigation-->
<nav>
<div class="wrapper">
<a href="index.php"><img src="img/logo-white.png" alt="Blogs logo"></a>
<ul>
<li><a href="index.php">Home</a></li>
<li><a href="discover.php">About Us</a></li>
<li><a href="blog.php">Find Blogs</a></li>
<?php
if (isset($_SESSION["useruid"])) {
echo "<li><a href='profile.php'>Profile Page</a></li>";
echo "<li><a href='logout.php'>Logout</a></li>";
}
else {
echo "<li><a href='signup.php'>Sign up</a></li>";
echo "<li><a href='login.php'>Log in</a></li>";
}
?>
</ul>
</div>
</nav>
<!--A quick wrapper to align the content (ends in footer.php)-->
<div class="wrapper">
登录.php
<?php
include_once 'header.php';
?>
<section class="signup-form">
<h2>Log In</h2>
<div class="signup-form-form">
<form action="includes/login.inc.php" method="post">
<input type="text" name="uid" placeholder="Username/Email...">
<input type="password" name="pwd" placeholder="Password...">
<button type="submit" name="submit">Sign up</button>
</form>
</div>
<?php
// Error messages
if (isset($_GET["error"])) {
if ($_GET["error"] == "emptyinput") {
echo "<p>Fill in all fields!</p>";
}
else if ($_GET["error"] == "wronglogin") {
echo "<p>Wrong login!</p>";
}
}
?>
</section>
<?php
include_once 'footer.php';
?>
登录.inc.php
<?php
if (isset($_POST["submit"])) {
// First we get the form data from the URL
$username = $_POST["uid"];
$pwd = $_POST["pwd"];
// Then we run a bunch of error handlers to catch any user mistakes we can (you can add more than I did)
// These functions can be found in functions.inc.php
require_once 'dbh.inc.php';
require_once 'functions.inc.php';
// Left inputs empty
if (emptyInputLogin($username, $pwd) === true) {
header("location: ../login.php?error=emptyinput");
exit();
}
// If we get to here, it means there are no user errors
// Now we insert the user into the database
loginUser($conn, $username, $pwd);
} else {
header("location: ../login.php");
exit();
}
有人对我如何在提交成功的登录表单时刷新标题有任何想法吗?
解决方案
由于有时在重新加载页眉后会在页面上留下一些内容,因此我们需要在die()
从页眉更改位置后使用。
TBH,不推荐使用 PHP 重定向,我建议您使用内置 JavaScript 函数重定向用户,window.location.replace(path)
您可以在 PHP 脚本中使用
?>
<script>
window.location.replace(path)
</script>
<?php
或者只是创建自己的函数:
function redirect($path) {
?>
<script>
window.location.replace('<?php echo $path ?>')
</script>
<?php
}
并使用它:redirect("profile.php")
推荐阅读
- javascript - 为什么当我在输入中输入连字符(-)时,它会作为问号发送到数据库?
- r - Determine maximum value in column related to specific order id
- r - 有没有一种更简单的方法可以找到 R 中分类数据和多列数值数据之间的相关性?
- javascript - PLAY CONSOLE WEB VIEW 跨应用脚本漏洞
- datetime - 将 UTC 时间戳转换为 ELM 中的用户时区
- css - 从 Chrome 开发者工具复制 CSS 规则时插入换行符
- android - 在Android中更改WebView中的文本颜色
- java - 带有查询注释的 Cassandra 存储库中的方法,返回与方法定义中指定的不同的返回类型
- c - 为什么 char 文字的 sizeof 与 sizeof(char) 不同?
- hashicorp-vault - 使用 Vault Secret 时发出 API 请求时出错