Сеансы сохраняются для каждого пользователя, поэтому у вас, вероятно, есть другая проблема, например, не вызывать session_start()
на каждой странице.Позвольте мне изложить лучший подход к этой проблеме.
Существует множество хороших методов кодирования, показанных ниже.Вызовы isset () предотвращают отправку предупреждений E_STRICT.Страница входа будет публиковаться до тех пор, пока пользователь не поймет это правильно, а затем перенаправить на следующую страницу.Любая другая страница проверит аутентифицированный сеанс и, если он не найден, перенаправьте обратно на страницу входа с сообщением об ошибке.
Как отмечено ниже, части этого кода должны быть помещены в глобальный включаемый файл, который вы включаете.на каждой странице.
Удачи.
Страница входа: /Login.php
<?php
session_start();
$username = trim(isset($_POST['username']) ? $_POST['username'] : '')
$password = trim(isset($_POST['password']) ? $_POST['password'] : '')
$error = trim(isset($_GET['error']) ? $_GET['error'] : '');
if(! empty($username) || ! empty($password))
{
// Authenticate if any username or password was submitted
// Ideally via query against MySQL
if($username == 'bob' && $password == 'bobpass')
{
$_SESSION['Authenticated'] = true;
$_SESSION['Expires'] = time() + 3600; // good for one hour
$_SESSION['username'] = $username;
// Now, redirect to login page
header('Location: /user/home.php');
exit();
}
else
{
// Oops, bad username/password...
$error = 'Invalid username and/or password';
}
}
?>
<!DOCTYPE html>
<html>
<head>
<title>Login Page</title>
</head>
<body>
<?php if($error) { ?>
<div style="color: red;">
<?php htmlspecialchars($error); ?>
</div>
<? } ?>
<form name="F" method="post" action="<?php echo htmlspecialchars($_SERVER['PHP_SELF'], ENT_QUOTES); ?>" >
Username: <input type="text" name="username" value="<?php echo htmlspecialchars($username, ENT_QUOTES); ?>" />
Password: <input type="password" name="password" />
<input type="submit" value="Login" />
</form>
</body>
</html>
Любая другая страница, для защиты которой необходим этот код... Например: /user/home.php
<?php
session_start();
// Following code checks for authenticated session, and either redirects back to
// login page, or allows user in. This should be put in a function and placed
// in a common include file.
if(isset($_SESSION['Authenticated']) && $_SESSION['Authenticated'])
{
//Ok, user was authenticated... Now, check expire time
if($_SESSION['Expires'] < time())
{
header('Location: /Login.php?error=Session+Expired');
exit;
}
// All still OK? Bump up the session expire time to one hour from now...
$_SESSION['Expires'] = time() + 3600; // good for one hour
}
... rest of page here ...