我有许多前端功能,这些功能是根据用户是否登录(即显示的菜单项)触发的,但是当用户登录时我无法触发它们,除非它们被重定向或页面被刷新。
$logged_in
用户登录后如何更改要设置的值?这些功能都可以正常工作,包括$_SESSION['SESS_USER_ID'] = $member['user_id'];
登录后的设置。
Index.php (大部分代码也在整个站点中使用)
在文件的开头:
<?php
require_once('auth.php'); // This file starts session, and checks if(!isset($_SESSION['SESS_USER_ID']) || (trim($_SESSION['SESS_USER_ID']) == ''))
require_once('config.php'); // Connects to database connection
$user_id = $_SESSION['SESS_USER_ID'];
$logged_in = (isset($_SESSION['SESS_USER_ID']));
?>
然后由 $logged_in 触发相关函数,并遵循以下基本格式:
<?php if ($logged_in) : ?>
// Some HTML or Script
<?php else : ?>
// Some HTML or Script
<?php endif; ?>
登录形式和功能
如果某些 AJAX 无关紧要,我深表歉意 - 我真的不了解 AJAX 并重新利用现有代码。
<form id="loginForm" name="loginForm" action="login-exec_pdo.php" method="post">
<label for="user_name">Username </label><input type="text" name="user_name" required />
<label for="password">Password </label><input type="text" name="password" required />
<div id="return_result"></div><div id="messageBox5">Please complete the highlighted fields</div>
<input type="submit" id="login" value="Sign in" />
</form>
<script type="text/javascript">
$(function () { $('#loginForm').validate({
rules: {user_name: {required: true, minlength: 2,}, password: {required: true, minlength: 6,},}, messages: {user_name: "", password: "",},
errorLabelContainer: "#messageBox5",
submitHandler: function (form){
$.ajax({
type: 'POST',
url: 'login-exec_pdo.php',
data: $("#loginForm").serialize(),
success: function(data) {
if(data == "true") {
$("#loginForm").fadeOut("fast");
}
else {
writeToTarget('return_result', 'Incorrect Username or Password');
} } }); } }); });
</script>
login-exec.php 文件
<?php
session_start();
require_once('config/config_pdo.php'); // Includes db connection, salt, & PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION
$password = $_POST['password'];
$hashedPassword = sha1($salt . $password);
try {
$stmt_user = $conn->prepare("SELECT * FROM customer_info WHERE user_name = :user_name and password = :hashedPassword");
$stmt_user->bindValue(':user_name', $_POST['user_name'], PDO::PARAM_STR);
$stmt_user->bindValue(':hashedPassword', $hashedPassword);
$stmt_user->execute();
session_regenerate_id();
$member = $stmt_user->fetch();
if($member) {
$_SESSION['SESS_USER_ID'] = $member['user_id'];
$_SESSION['SESS_USER_NAME'] = $member['user_name'];
session_write_close();
echo "true";
exit();
}else {
echo "false";
exit();
}
}catch(PDOException $e) {
echo $e->getMessage();
}
?>
我还尝试使用 javascript 和 php 在登录功能(如上所示)中的成功功能中设置它,但它要么没有设置它和/或阻止登录功能正确完成。我尝试过的一些事情是: if ($logged_in) :
$logged_in = (isset($_SESSION['SESS_USER_ID']));
$logged_in = "true";
和 $logged_in = 1;