Как мы делаем аутентификации в веб-приложениях? - PullRequest
2 голосов
/ 19 июня 2011

Извините, я много написал, чтобы объяснить мою ситуацию. Если у вас нет времени или нет настроения читать все эти вопросы, просто переходите к вопросам.Даже ответ на один из них помогает моей ситуации, спасибо: D

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

Вот что я получил:

  1. Мы проверяем пользователя и передаем данные POST вбаза данных
  2. Если все верно, мы даем клиенту новый сеанс и сохраняем его в базе данных.
  3. Клиент сохраняет сеанс в виде файла cookie и отправляет его в каждом запросе страницы.
  4. Сервер проверяет сеанс и выдает контент, предназначенный для пользователя.

Вот часть, которую я не знаю:

  • Как мы генерируем сеанс?
  • Как мы отправляем его клиенту?
  • Как он сохраняется в файлах cookie?
  • Когда истекает срок его действия?
  • Что произойдет, еслиэто истекло?Что нам делать?
  • Есть ли что-то еще, что я должен знать?

Если можете, приведите несколько примеров в ноде.
Заранее спасибо: D

1 Ответ

3 голосов
/ 19 июня 2011
  • Сессия - это просто уникальный ключ (идентификатор сеанса), связанный с объектом / массивом, так что вы можете подключить данные к пользователю вашего сайта.
  • Вы отправляете идентификатор сеанса клиенту в виде файла cookie, после отправки клиент отправляет свой идентификатор сеанса на ваш сервер при каждом HTTP-запросе.
  • Вы отправляете заголовок HTTP Set-Cookie (Set-Cookie: sessionid=abcdefg38974).
  • Вы можете установить срок его действия, когда захотите, когда браузер закроется или, например, через год (это позволит вам войти в систему в течение года, после чего вам придется снова войти).
  • Когда срок действия файла cookie истекает, его просто выбрасывают, а на стороне сервера он будет выглядеть так, как будто у пользователя еще не установлен идентификатор сеанса, поэтому он должен снова войти в систему.
  • Вы должны знать о таких вещах, как перехват сеанса (кража чужого идентификатора сеанса). Посмотрите на это.

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

var http = require('http');

var sessions = {};
http.createServer(function (req, res) {

    var ssid;
    var session;

    if (req.headers.cookie) {
        // Cookie already set, read it
        var parts = req.headers.cookie.split('=');
        ssid = parts[1];

        // Is the session id known to us?
        if (typeof(sessions[ssid]) != "undefined") {
            session = sessions[ssid];

            console.log('Loaded session with id ' + ssid);
        }
    }

    if (typeof(session) == "undefined") {
        // No cookie set, make one
        ssid = Math.random();
        session = {
            'visitNumber': 0
        }

        console.log('Created session with id ' + ssid);
    }

    session.visitNumber++;

    // Respond to the browser
    res.writeHead(200, {
        'Content-Type': 'text/plain',
        'Set-Cookie': 'ssid=' + ssid
    });

    res.end('Visit number: ' + session.visitNumber + '\n');

    // Save the changes we have made to the session data
    sessions[ssid] = session;

}).listen(8080);
...