Управление сессиями PHP - Основы - PullRequest
1 голос
/ 22 сентября 2010

Я пытался научиться управлению сессиями с помощью PHP ... Я просматривал документацию по www.php.net и просматривал эти ПРИМЕРЫ . Но они идут над моей головой ....

что моя цель в том, чтобы когда пользователь заходит в систему ..., тогда пользователь может получить доступ к некоторым зарезервированным страницам и без входа в систему эти страницы недоступны ... будет сделано через сессии, но весь материал в интернете слишком сложен для изучения ...

Кто-нибудь может предоставить пример кода для достижения моей цели, из которого я могу УЧИТЬСЯ , или ссылку на какой-нибудь учебник ...

p.s. Извините, если я не имел смысла в вышесказанном, потому что я не знаю этого материала, я новичок

Ответы [ 4 ]

2 голосов
/ 22 сентября 2010

Первая проверка, включен ли модуль сеанса

<?php
    phpinfo();
?>

Используя сеансы, каждый из ваших посетителей получит уникальный идентификатор. Этот идентификатор будет идентифицировать различных посетителей, и с помощью этого идентификатора хранятся пользовательские данные, хранящиеся на сервере.

Прежде всего, вам нужно начать сеанс с помощью функции session_start (). Обратите внимание, что эта функция должна вызываться до того, как будет сгенерирован какой-либо вывод! Эта функция инициализирует суперглобальный массив $ _SESSION, в котором вы можете хранить свои данные.

session_start();
$_SESSION['username'] = 'alex';

Теперь, если вы создаете новый файл, в котором вы хотите отобразить имя пользователя, вам нужно снова начать сеанс. В этом случае PHP проверяет, имеют ли данные сеанса фактический идентификатор или нет. Если он может его найти, инициализируйте массив $ _SESSION этими значениями, иначе массив будет пустым.

session_start();
echo "User : ".$_SESSION['username'];

Чтобы проверить, существует ли переменная сеанса, вы можете использовать функцию isset ().

session_start();
   if (isset($_SESSION['username'])){
      echo "User : ".$_SESSION['username'];
   } else {
      echo "Set the username";
      $_SESSION['username'] = 'alex';
   }
1 голос
/ 22 сентября 2010

Прежде чем начать что-либо писать на любой веб-странице, вы должны начать сеанс, используя следующий код в самой первой строке: -

<?php
ob_start(); // This is required when the "`header()`" function will be used. Also it's use will not affect the performance of your web application.
session_start();
// Rest of the web page logic, along with the HTML and / or PHP
?>

На странице входа в систему, где вы пишете логику процесса входа в систему, используйте следующий код: -

<?php
if (isset($_POST['btn_submit'])) {
    $sql = mysql_query("SELECT userid, email, password FROM table_users
                        WHERE username = '".mysql_real_escape_string($_POST['username'])."'
                        AND is_active = 1");

    if (mysql_num_rows($sql) == 1) {
        $rowVal = mysql_fetch_assoc($sql);

        // Considering that the Password Encryption used in this web application is MD5, for the Password Comparison with the User Input
        if (md5($_POST['password']) == $rowVal['password']) {
            $_SESSION['username'] = $_POST['username'];
            $_SESSION['email'] = $rowVal['email'];
            $_SESSION['userid'] = $rowVal['userid'];
        }
    }
}
?>

Теперь на всех зарезервированных страницах вам нужно сделать две вещи: -

  • Сначала инициализируйте / запустите сеанс, как указано выше.
  • Инициализируйте все важные переменные конфигурации, как того требует ваше веб-приложение.
  • Вызвать пользовательскую функцию "checkUserStatus()", чтобы проверить наличие статуса пользователя, вошедшего в систему или нет. Если возвращаемое значение равно true, тогда веб-страница будет отображаться автоматически, поскольку дальнейшая проверка не требуется, в противном случае сама функция перенаправит (гостевую) программу просмотра на страницу входа. Не забудьте включить определение этой функции перед вызовом этой функции, в противном случае вы получите фатальную ошибку.

Определение пользовательской функции "checkUserStatus()" будет примерно таким: -

function checkUserStatus() {
    if (isset($_SESSION['userid']) && !empty($_SESSION['userid'])) {
        return true;
    }
    else {
        header("Location: http://your_website_domain_name/login.php");
        exit();
    }
}

Надеюсь, это поможет.

1 голос
/ 22 сентября 2010
  • Каждая страница должна начинаться немедленно с session_start()
  • Отображение формы входа на общедоступных страницах с минимальными учетными данными (имя пользователя / пароль, электронная почта / пароль)
  • При отправке проверять отправленные данные в вашей базе данных (это имя пользователя существует? »Этот пароль действителен?)
  • Если это так, присвойте переменную вашему массиву $_SESSION, например. $_SESSION['user_id'] = $result['user_id']
  • Проверьте эту переменную на каждой зарезервированной странице, например:

    <?php
    if(!isset($_SESSION['user_id'])){
    //display login form here
    }else{
    //everything fine, display secret content here
    }
    ?>
    
0 голосов
/ 22 сентября 2010

Это не просто.Вы не можете безопасно сохранить только в сеансе "пользователь вошел в систему".Пользователь может написать что-нибудь в своем сеансе.

Самое простое решение - использовать какую-то инфраструктуру, например Kohana , которая имеет встроенную поддержку для такой функции.

Чтобы сделать это самостоятельно, вы должны использовать такой механизм, как этот:

session_start();
if (isset($_SESSION['auth_key'])) {
    // TODO: Check in DB that auth_key is valid
    if ($auth_key_in_db_and_valid) {
         // Okay: Display page!
    } else {
         header('Location: /login/'); // Or some page showing session expired
    }
} else {
    header('Location: /login/'); // You're login page URL
    exit;
}

В форме страницы входа в систему:

session_start();
if (isset($_POST['submit'])) {
    // TODO: Check username and password posted; consider MD5()
    if ($_POST['username'] == $username && $_POST['password'] == $password) {
        // Generate unique ID.
        $_SESSION['auth_key'] = rand();
        // TODO: Save $_SESSION['auth_key'] in the DB.
        // Return to some page
        header('Location: ....');
    } else {
        // Display: invalid user/password
    }
}

Недостающая часть: вы должны аннулировать любой другой auth_key, не использованный после определенноговремя.

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