使用会话确认登录
问题描述:
我创建一个页面,用选择的形式,取决于选择的选项,将显示不同的信息。使用会话确认登录
在用户可以访问此页面,他们必须登录。我继续检查他们是否使用会话登录,否则我将用户重定向到登录名。如果$ _SESSION [“admin_username”]存在,那么它们在其他登录的情况还没有登录。
问题是试图在用户选择的选项之间去设置会话。所以我将会话设置为表单标记中的操作。我认为这只会设置会话,如果选择表单被使用,但会重置它选择表单是否使用。这破坏了登录检查。
有没有办法来解决这个问题?谢谢!
这里是我的代码:
<?php require_once("../Include/connection.php"); ?>
<?php require_once("../Include/functions.php"); ?>
<?php require_once("../Include/sessions.php"); ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html lang="en">
<style type="text/css">
div {position: relative; left: 300px}
</style>
<head>
<title>databaseConn</title>
</head>
<body>
<h2>Welcome, <?php echo (find_user_by_id($_GET["user"])["username"]); ?>!</h2>
<?php
if ($_SESSION["admin_username"]) {
echo "Logged in";
} else {
redirect_to(login.php); }
<?php
if (isset($_POST["submit"])) {
switch ($_POST["future"]) {
case "At Graduation":
echo "At Graduation";
break;
case "2 Years After Graduation":
echo "2 Years After Graduation";
break;
case "5 Years After Graduation":
echo "5 Years After Graduation";
break;
case "10 Years After Graduation":
echo "10 Years After Graduation";
break;
case "20 Years After Graduation":
echo "20 Years After Graduation";
break;
case "50 Years After Graduation":
echo "50 Years After Graduation";
break;
}
}
echo admin_username();
?>
<a href="edit_account.php?username=<?php $current_user_id; ?>">edit page</a>
<form action="<?php $_SESSION["admin_username"] = (find_user_by_id($current_user_id)["username"]); ?>" action="main.php?user=<?php echo $current_user_id; ?>" method="post">
<select name="future">
<option value="At Graduation">At Graduation</option>
<option value="2 Years After Graduation">2 Years After Graduation 2</option>
<option value="5 Years After Graduation">5 Years After Graduation 2</option>
<option value="10 Years After Graduation">10 Years After Graduation 2</option>
<option value="20 Years After Graduation">20 Years After Graduation 2</option>
<option value="50 Years After Graduation">50 Years After Graduation 2</option>
</select>
<input type="submit" name="submit" value="submit">
</form>
</body>
</html>
这里是admin_username功能我用。
function admin_username() {
if (isset($_SESSION["admin_username"])) {
$username = $_SESSION["admin_username"];
$_SESSION["admin_username"] = null;
return $username;
}
}
答
<form action="<?php $_SESSION["admin_username"] = (find_user_by_id($current_user_id)["username"]); ?>" action="main.php?user=<?php echo $current_user_id; ?>" method="post">
在此行中要设置$_SESSION['admin_username']
到任何find_user_by_id($current_user_id)["username"]
回报。这可能是你的代码中的错误。
而且您使用的是动作属性的两个时间。
我没有看到您的代码中admin_username()
功能的任何使用。它何时被调用,它应该做什么?
我用了两次来设置会话并刷新页面。这似乎采取了两项行动。它不应该? – zach
通过执行$ _SESSION [“admin_username”] = null;该功能基本上取消了您的会话 – Philipp
admin_username清除会话,以便用户可以访问该页面的唯一方式是登录。会话从登录页面开始。 – zach