Во-первых, извините за плохо сформулированный заглавный вопрос. Я пишу небольшую программу, в которой функция login () при вызове получает «имя пользователя» и «уровень пользователя» из базы данных. Если запись верна, пользователь переносится на страницу выхода. Все, что он делает, это приветствует пользователя и предлагает ему выйти из системы. Тем не менее, он не отображает информацию о пользователе, когда я использую следующий код:
logoutForm.inc.html …
<!DOCTYPE HTML>
<html>
<head>
<title>Welcome</title>
<link rel="icon" type="image/png" href="http://upload.wikimedia.org/wikipedia/commons/a/ac/Farm-Fresh_key.png">
<meta charset="utf-8">
</head>
<body>
<div id = "wrapper">
<div id="masthead">
<h2>Welcome, <?php echo $userName; ?>!</h2>
<h3>Your current user level is <?php echo $userLevel; ?></h3>
<form action method="post" name="logoutForm">
<p>
<input type="submit" name="logout" value="Log Out" />
</p>
</form>
</div>
</div>
</body>
</html>
functions.php …
<?php
function login($userName)
{
if (empty($userName)){
echo '<h2>You forgot to enter something</h2>
<meta http-equiv="refresh" content="2; url=login.php" />';
}
else
{
$conn = new PDO("mysql:host=localhost:3307;dbname=users", "root", "");
$result = $conn->prepare("SELECT * FROM user_list WHERE email = :username");
$result->bindParam(':username', $userName);
$result->execute();
$row = $result->fetch(PDO::FETCH_ASSOC);
if($row > 0) {
if ($row['userLevel'] == 'A')
{
$userLevel = 'Admin';
}
elseif ($row['userLevel'] == 'M')
{
$userLevel = 'Member';
}
header("Location: includes/logoutForm.inc.html");
}
else
{
echo '<h2>That entry is INVALID</h2>
<meta http-equiv="refresh" content="2; url=login.php" />';
}
}
}function logout($userName)
{
session_start();
echo '<title>Logout</title>
<link rel="icon" type="image/png" href="http://upload.wikimedia.org/wikipedia/commons/a/ac/Farm-Fresh_key.png">
<meta charset="utf-8">';
$_SESSION['username'] = array();
session_destroy();
$name = session_name(); $expire = strtotime('-1 year'); $params = session_get_cookie_params(); $path = $params['path']; $domain = $params['domain']; $secure = $params['secure']; $httponly = $params['httponly'];
setcookie($name, '', $expire, $path, $domain, $secure, $httponly);
die('<h3>You have successfully logged out</h3>
<meta http-equiv="refresh" content="2; url=login.php" />');
}
Не говоря уже о том, что функция logout () полностью испорчена. Принимая эту одну проблему за один раз. Спасибо за поиск, пожалуйста, помогите, если можете.
Если вы хотите, чтобы логин сохранялся, вам нужно сохранить информацию в сеансе (сеанс может быть сохранен в базе данных, если вам нужно, чтобы он сохранялся в течение более длительных периодов, чем просмотр сеансов):
if($row > 0) {
// start the session, you might want to do that at the top of your script
session_start();
if ($row['userLevel'] == 'A')
{
$_SESSION['userLevel'] = 'Admin';
}
elseif ($row['userLevel'] == 'M')
{
$_SESSION['userLevel'] = 'Member';
}
Теперь вы можете начать сеанс на своих страницах входа в систему и проверить, установлена ли переменная и каковы точные разрешения пользователя.
Замечания: Не используйте строку запроса для передачи этих переменных, как указано в комментариях. Это позволит любому претендовать на то, чтобы войти в систему с разрешениями, которые они хотят, просто изменив строку запроса. Сеанс хранится на стороне сервера и поэтому не может быть изменен посетителем.
Других решений пока нет …