Ajax система регистрации\авторизации

Нашел статью http://code-live.ru/post/php-ajax-registration/
Эта система идеально подходит для меня, но в отличии от автора, у меня она не работает.
Регистрация проходит без проблем, а вот с авторизацией косяки.
С базой соединяется, пароли сверяет, но когда дело доходит до метода isAuthorized(), он постоянно возвращает false, и собственно, висит окно авторизации и ничего не происходит, абсолютно никаких сообщений.

Вся проблема была в методе isAuthorized().
Вот так все работает:

public static function isAuthorized()
    {
        if (!empty($_COOKIE['sid'])) {
            return (bool) $_COOKIE['sid'];
        }
        return false;
    }

Новый вопрос:
Как можно запихнуть выход из учетки в список?

 <ul class="dropdown-menu" role="menu" aria-labelledby="drop3">
              <li><a tabindex="-1" href="http://google.com"><i class="fa fa-user"></i> Профиль</a></li>
              <li><a tabindex="-1" href="#anotherAction"><i class="fa fa-gear"></i> Настройки</a></li>
              <li><a tabindex="-1" href="#"><i class="fa fa-edit"></i> Админка</a></li>
              <li class="divider"></li>
              <form class="ajax" method="post" action="./ajax.php">
                <input type="hidden" name="act" value="logout">
                <div class="form-actions">
                  <button class="btn btn-large btn-primary" type="submit">Logout</button>
                </div>
              </form>
            </ul>

Но получается полный бред. Пробовал повесить отправку формы на JS, но не происходит редирект от ajax.php

Решил проблему, просто отправляю POST через ajax:

function getXmlHttp() {
    var xmlhttp;
    try {
      xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
    } catch (e) {
    try {
      xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
    } catch (E) {
      xmlhttp = false;
    }
    }
    if (!xmlhttp && typeof XMLHttpRequest!='undefined') {
      xmlhttp = new XMLHttpRequest();
    }
    return xmlhttp;
  }
  function Logout() {
    var value = "logout";
    var name = "act";
    var xmlhttp = getXmlHttp(); // Создаём объект XMLHTTP
    xmlhttp.open('POST', 'ajax.php', false); // Открываем асинхронное соединение
    xmlhttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); // Отправляем кодировку
    xmlhttp.send("act=logout"); // Отправляем POST-запрос
    window.location.replace(location)
  }

Вся проблема была в методе isAuthorized().
Вот так все работает:

Вы просто сделали авторизованными всех пользователей, у которых установлена $_COOKIE['sid']. Так нельзя делать.

Проблема в другом. Возможно, вы не выполняете session_start() на странице, где подключается проверка авторизации (через isAuthorized()).

Проблема в другом. Возможно, вы не выполняете session_start() на странице, где подключается проверка авторизации (через isAuthorized()).

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

Вы просто сделали авторизованными всех пользователей, у которых установлена $_COOKIE['sid']. Так нельзя делать.

Только что тестил, вроде все хорошо. А чем это чревато?

А чем это чревато?

Тем, что кто угодно может установить эту куку и стать «авторизованным». Непонятно, под каким ID-шником, правда.

Доступы к базе корректно настроили? Версия PHP? Вывод ошибок включен? Если да, то что отдает при POST-запросе файл ajax.php?

Тем, что кто угодно может установить эту куку и стать «авторизованным». Непонятно, под каким ID-шником, правда.

это не страшно, сайт закрытый

Доступы к базе корректно настроили? Версия PHP? Вывод ошибок включен? Если да, то что отдает при POST-запросе файл ajax.php?

Да, с этим все нормально, с php не один год знаком, Ваш скрипт мне нужен был потому что я js абсолютно не знаю

эм.. я не знаю что это, но только что специально поставил ваш скрипт в начальном виде, и он просто так заработал. в своем поменял тоже с $COOKIE на $SESSION и все нормально стало работать.. я не знаю что это за магия

Добрый день.

Возник вопрос по той же статье:
Как проще всего приклеить еще и изменение пароля пользователем к этому проекту?

Всем доброго времени суток!
Неделю уже смотрю на пример авторизации в топике, в js и php новичек, вроде все понятно, но как скрипт ajax-form.js узнает о том, что сделан запрос и сервер вернул ответ — не понимаю :(.
Прошу помощи, объясните сирому и убогому, как это происходит, и был бы весьма признателен за какие-либо комментарии к файлу ajax-form.js, чем подробней тем лучше.

Привет всем! Как можно получить имя и/или id пользователя в текущей сессии? Чтобы потом, например, использовать этот id в mysql-запросе в стороннем файле или в файле index.php.

Внимание! Это довольно старый топик, посты в него не попадут в новые, и их никто не увидит. Пишите пост, если хотите просто дополнить топик, а чтобы задать новый вопрос — начните новый.

Ответить

Вы можете использовать разметку markdown для оформления комментариев и постов. Используйте функцию предпросмотра для проверки корректности разметки.

Пожалуйста, оформляйте исходный код в соответствии с правилами разметки. Для того, чтобы вставить код в комментарий, скопируйте его в текстовое поле ниже, после чего выделите то, что скопировали и нажмите кнопку «код» в панели инструментов. Иначе ваш код может принять нечитаемый вид.

Либо производите оформление кода вручную, следующим образом:

``` #include <iostream> using namespace std; int main() { // ... } ```

Предпросмотр сообщения

Ваше сообщение пусто.