目前我在设置会话变量时遇到问题。
<?php
session_start();
if( isset($_SESSION['user_id']) ){
header("Location: home.php");
}
require 'pdoconnect.php';
if(!empty($_POST['email']) && !empty($_POST['password'])):
$records = $conn->prepare('SELECT id,email,password FROM users WHERE email = :email');
$records->bindParam(':email', $_POST['email']);
$records->execute();
$results = $records->fetch(PDO::FETCH_ASSOC);
$message = '';
if(count($results) > 0 && password_verify($_POST['password'], $results['password']) ){
$_SESSION['user_id'] = $results['id'];
header("Location: glogin.php");
$_SESSION['email'] = $_POST['email'];
$email = $_SESSION['email'];
} else {
$message = 'Login failed, try again';
}
endif;
上面你可以看到我正在使用的登录脚本,此代码在
运行的login.php
<form action="login.php" method="POST">
<input type="email" placeholder="Enter your e-mail" name="email" required>
<input type="password" placeholder="Enter your password" name="password" required>
<input type="submit" value="Log in">
<?php if(!empty($message)): ?>
<p><?= $message ?></p>
<?php endif; ?>
</form>
这是用于登录的表单,表单也在
运行的login.php
现在出现问题,我想将用户登录的电子邮件放入会话变量,但是我无法将表单操作设置为其他页面,因为登录脚本将不再起作用。
所以我的问题是:&#39;如何在不更改表单操作的情况下阅读$ _SESSION [&#39; email&#39;]?
我已经尝试将login.php包含在另一个页面中但不幸的是没有工作。
答案 0 :(得分:0)
您在header()
值分配之前使用重定向$_SESSION
。
:此:强>
$_SESSION['user_id'] = $results['id'];
header("Location: glogin.php");
$_SESSION['email'] = $_POST['email'];
$email = $_SESSION['email'];
应该是:
$_SESSION['user_id'] = $results['id'];
$_SESSION['email'] = $_POST['email'];
$email = $_SESSION['email'];
header("Location: glogin.php"); // at last
exit;
如果您想在$_SESSION['email']
页面中使用glogin.php
值,那么您还需要在页面中session_start()
开始会话。
最后一个建议是,您可以$results
在您的会话中使用$_POST
值而不是id
值与$_SESSION['email'] = $results['email'];
字段相同,如:
exit()
您还需要了解header()
功能后vscode.workspace.onDidOpenTextDocument(function (doc) {
if (doc && doc.fileName.endsWith('.scpt')) {
console.log("You're trying to open a binary AppleScript file")
}
});
所需的原因,您可以阅读以下文章:PHP: Utilizing exit(); or die(); after header("Location: ");
答案 1 :(得分:0)
使用$_SERVER['PHP_SELF']
代替login.php作为表单操作。
<form method="POST" action="<?= $_SERVER['PHP_SELF']; ?>">
使用exit
后,您还应该header('Location: ...')
。
if (isset($_SESSION['login'])) {
header("Location: index.php");
exit;
}
如果在执行重定向后没有退出,则仍将执行完整的脚本。有些变量可能没有设置好,简而言之..只需exit;
此外,您在设置会话变量之前会重定向。
$_SESSION['user_id'] = $results['id'];
$_SESSION['email'] = $_POST['email'];
header("Location: glogin.php");
exit;
不确定你要用gloging.php做什么,但看起来应该是这样的。
<?php
session_start();
if (isset($_SESSION['user_id'])) {
echo $_SESSION['email'];
exit;
} else {
header("Location: nologin.php");
exit;
}
?>