Начало PHP-сессии глобально - PullRequest
0 голосов
/ 21 сентября 2011

Я довольно новичок в PHP, и я хотел создать систему входа пользователя через MySQL.Сейчас я работаю над процессом входа в систему.У меня есть форма, которая принимает имя пользователя, и действие этого сценария PHP:

<?php
session_start();
$_SESSION['username'] = $_POST['username'];
$_SESSION['password'] = $_POST['password'];
?>

Затем главная страница имеет это:

<?php
if(isset($_SESSION['username']))
    echo 'TESTESTEST';
else {
echo '<form action="/login.php" method = "post">';
    echo 'Username: <input type="text" name="username" method="post"/>';
    echo 'Password: <input type="password" name="password" method="post"/>';
    echo '<input type="submit" value="Submit" method="post" />';
echo '</form>';
}
?>

В основном, если сеанс установленпрежде, он не будет отображать поле имени пользователя / пароля, а скорее сообщение с надписью TESTESTEST.Тем не менее, когда я показывал эту страницу своему другу, у него также было это сообщение и нет логина.Как сделать так, чтобы для каждого пользователя хранились разные сессии?

Ответы [ 3 ]

4 голосов
/ 21 сентября 2011

session_start() необходимо вызывать вверху каждой страницы.В противном случае использование $_SESSION переменных приведет к неопределенному поведению.Как вы заметили.

2 голосов
/ 21 сентября 2011

Сеансы сохраняются для каждого пользователя, поэтому у вас, вероятно, есть другая проблема, например, не вызывать 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 ...
0 голосов
/ 21 сентября 2011

вы должны звонить session_start() на каждой странице, которая имеет доступ к $ _SESSION.он возобновит последний сеанс для пользователя, посещающего сайт.данные для этого пользователя не будут заменены, пока вы не наберете session_destroy()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...