в PHP смысла немного а в компилируемых языках там можно реально закрыть доступ к приватным членам.
Теперь ясно.
caballero пишет:
с какой стати? тем более у него при этом будут проблеммы и с другими сайтами.
Ну так-то да - кто отключил, это ихние проблемы. Меня с этого форума выкидывает без куков. Просто я думал, что это я что-то не так написал в скрипте. Вроде написано, что phpsessid автоматически подставляется, но что-то не подставляется он.
Сделал такую ссылку:
И в к каждой ссылке приписывать <?php echo SID ?>
И еще формы.... (Добавление)
PPS
В формы вставляется скрытое поле. А вот к ссылкам не добавляется phpsessid
Ну и ладно...
лучше уж слделайте поля класса публичными и обращайтесь напрямую
Ну вот и я о том же - в чем смысл приватности?
caballero пишет:
ну и зачем их отключать и делать катастрофу на ровном месте?
Ну так, если пользователь отключит? phpsessid генерируется при каждом обновлении, но в адресную строку не передается.
Или авторизация без куков невозможна?
я ж писал
$_SESSION["user"] = $user;
...
$_SESSION["user"]->getName();
Ага понятно. То есть в $_SESSION['user'] кладем авторизованного юзера со всеми нужными свойствами и имеем метод для обращения к этим самым свойствам.
А почему такой метод не подойдет
У меня новая катастрофа... отключил куки в браузере и сломалась авторизация. Авторизация проходит, но сбрасывается после первого обновления страницы.
В .htaccess
во т это в конструкторе тоже не годится
Цитата:
$_SESSION = $this;
$_SESSION['user'] = $this ?
caballero пишет:
и чего вы данные с формы в юзера пихаете
Не ну это для примера, конечно данные фильтруются, запрос в БД...
И все это конечно не в конструкторе. Просто коротко написал.
Мне не понятно как положить объект в сессию и потом обращаться к его свойствам.
Плюс еще прочитал, что стартовать сессию при таком раскладе нужно после чтения классов. Но у меня почему-то и так заработало.
Я сначала отправлял данные, потом комментировал строки приема данных и объявления нового объекта, и в сессии все равно оставался объект класса Users.
caballero пишет:
если разлогинися
$_SESSION["user"] = null;
еслественно нужны проверки на null;
потму я и написал в соседней ветке что лучше фейковый юзер
В какой ветке? Какой фейковый?
И вообще я что-то не пойму смысла. Свойства приватные и чтобы к ним обратиться, нужно писать метод. В чем смысл?
Хорошо, тогда метод обновления/удаления пользователя приватный и не статический?
удаления - тоже статический - екемпляр не может себя удалитть.
нестатические методы - те которые предназначены для работы с атрибутами (полями)екземпляра.
те которые манипулируют екземплярами - должны быть статическими.
Теоретически - статические методы юзера должны относится к какому то классу типа фабрики или менеджера юзеров. но использование статических методов в самом классе упрощает структуру. Кроме того статические методы имеют доступ к приватным полям екземпляра что то же удобно при инициализации например
Цитата:
Тогда и свойство $online не нужно? Метод авторизации просто вернет true или false:
да
или он может вернуть уже готовый екземпляр юзера если удачно или null если не удачно.
Угу, теперь понятно.
Я вот еще что не пойму.
После удачной авторизации пользователя я записываю в $_SESSION почти все свойства пользователя, кроме email и password, чтобы потом не дергать БД. А вот если я в классе сделаю свойства идентичные полям в таблице пользователей и при удачной авторизации буду записывать в эти свойства значения. По окончании кода мне будут доступны эти свойства? Ведь объект уничтожается по окончании кода.
К примеру пользователь авторизовался, я перезапросил страницу, дабы избавиться от $_POST, и хочу вывести приветствие.
DelphinPRO
Вы гений!
У меня с практической реализацией вроде более-менее, а вот с логическим воплощением все плохо.
Действительно, нужно просто расставить функцию. Даже наверное написать класс с пока что одним статическим методом загрузки мобулей (раз уж в index.php подключен файл с __autoload).
Ну как-то так
авторазиция обычно делается статическим методом потому как по логике на связана и с каким экмепляром.
для работы с Бд лучше взять готовые решения. PDO например если уж хочется ООП
Я наверное что-то не понимаю. Ну из примеров: кролик - экземпляр класса зверей, кролик живой или дохлый - свойство экземпляра класса зверей, кролик кролик залезает в нору, если вход не привалило булыжником - метод экземпляра.
Юзер - экземпляр класса пользователей. Юзер online или offline - свойство юзера. Юзер входит на сайт, если пустят - метод.
Есть какое-то принципиальное отличие между:
$user = new Users("auth", $data);
$user = Users::authUser($data);
Я вот тут почитал, подумал... я так понял, то что я захотел - это шаблонизатор. То есть, некая функция принимает html шаблон с некими метками и выдает этот шаблон с вставленным кодом php. Но что-то я так думаю, это идиотизм. Заменить код php в шаблоне на непонятные метки, чтобы потом php заменил эти метки опять на код php.
Но вот как бы сделать, чтобы вставки php в шаблоне вызывали то что нужно. К примеру до вывода отрабатывает код модуля авторизации и определяет - авторизован пользователь или нет. В зависимости от итога работы, модуль должен каким-то образом вставить на страницу форму авторизации или приветствие пользователя со ссылкой на профиль. Модуль должен работать до вывода, так как ставится кука.
Я сделал пока так:
в index.php подключается конфиг (константы с параметрами подключения к БД, константа корня сайта и т.п...), далее подключается файл с функцией __autoload, далее модуль авторизации и последним файл шаблона.
Модуль авторизации в конце работы присваивает переменной значение:
//А уже в шаблоне, в том месте, где выводится форма, я написал
include_once(ROOT .'/mod/auth/'.$panel);
Если теперь нужно будет отключить авторизацию, то нужно будет убрать инклюд в index.php и в шаблоне. Можно конечно в шаблоне подключать форму в ифе, но и это как мне видится - не комильфо.
Все равно, нужен какой-то контроллер, который будет включать/выключать модули и определять, где они должны отображаться. Желательно, конечно же, чтобы управление было в админке, в удобном виде. Ну типа там поставил флажок, выбрал позицию из списка - заработала авторизация. (Добавление) ЗЫ
И это только первый модуль - авторизация. А дальше что? Каждый модуль инклюдить руками? В админке навигацию я делаю на $_GET, switch и if. Но вот с модулями на фронте так не выйдет. (Добавление) PPS
Не знаю, может кто-то скажет, что это лишний геморой, но у меня как бы мания к автоматизации всего, что можно автоматизировать. Захотел я, чтобы комп включался/выключался сам - настроил, работает. Надоело мне прогревать прогревать машину - поставил автозапуск - она сама прогревается зимой и охлаждается летом. Так и здесь, надо как-то автоматизировать подключение нужных модулей, только как...
Ну перезапросить страницу сразу.
Я вчера и сегодня писал авторизацию. Если юзер авторизовался, то заполняется $_SESSION, ставится кука и страница перезапрашивается.
Нужно смотреть в сторону str_replace() этих самых меток.
Ну а как в админке эти метки будут выглядет - не важно.
Как вариант в админку - показывать "карту" лайоута в которой на возможных местах появления модулей будут висеть выпадающие списки всех доступных модулей, с возможностью множественного выбора.
Вот на место <include name="top_line"> вставлять один или несколько модулей. Я понимаю что делает str_replace(), но что-то не соображу. (Добавление)
caballero пишет:
делать это в админке означает повторять функционал джумлы что глцпо.
а зачем это вообще в админке? ты что каждый день на сайте будешь модули менять?
Каждый день не буду. Я собственно не облезу, если руками в шаблоне пропишу. Просто хочется как-то облагородить это дело. (Добавление) ЗЫ
К тому же сегодня столкнулся с проблемой. Сначала подключил модуль авторизации прямо в шаблон. А при авторизации ставятся куки. Ну так получилось, что ставились они до вывода. А вот если подключить какой-то вывод перед модулем авторизации (к примеру форму поиска), то уже косяк.
Пришлось подключить модуль авторизации до подключения шаблона, а в шаблоне инклюдить нужные куски html с подстановкой значения в путь через переменную, которая определяется в файле авторизации.