- •Область применения
- •История php
- •2. Змінні. Константи. Вбудовані константи. Елементи структурного програмування (розгалуження, організація циклів, передача управління) Основы
- •Предопределенные переменные
- •Область видимости переменной
- •Ключевое слово global
- •Использование статических (static) переменных
- •Ссылки с глобальными (global) и статическими (static) переменными
- •Переменные переменных
- •Переменные извне php html-формы (get и post)
- •Имена переменных кнопки-изображения
- •Точки в именах приходящих переменных
- •Определение типов переменных
- •Константы Содержание
- •Синтаксис
- •"Волшебные" константы
- •Выражения
- •3. Використання масивів у php. Способи створення масиву. Індексні масиви.Асоціативні масиви Массивы
- •Синтаксис Определение при помощи array()
- •Создание/модификация с помощью синтаксиса квадратных скобок
- •Полезные функции
- •Что можно и нельзя делать с массивами
- •Так что же в этом плохого?
- •Преобразование в массив
- •Сравнение
- •Примеры
- •4. Функції в php. Синтаксис опису функцій. Порядок визначення і виклику. Способи
- •Функции, определяемые пользователем
- •Аргументы функции
- •Передача аргументов по ссылке
- •Значения аргументов по умолчанию
- •Списки аргументов переменной длины
- •Возврат значений
- •Обращение к функциям через переменные
- •Анонимные функции
- •5. Схема роботи Web-додатку, архітектура клієнт-сервер. Протокол http. Загальна структура http-повідомлень (запит, відповідь)
- •Технические особенности[править | править вики-текст]
- •Архитектура веб-приложений[править | править вики-текст]
- •Программное обеспечение[править | править вики-текст]
- •Клиенты[править | править вики-текст]
- •Исходные серверы[править | править вики-текст]
- •Прокси-серверы[править | править вики-текст]
- •История развития[править | править вики-текст]
- •Структура протокола[править | править вики-текст]
- •Стартовая строка[править | править вики-текст]
- •Методы[править | править вики-текст]
- •Options[править | править вики-текст]
- •Get[править | править вики-текст]
- •Head[править | править вики-текст]
- •Post[править | править вики-текст]
- •Put[править | править вики-текст]
- •1Xx Informational («Информационный»)
- •2Xx Success («Успех»)
- •3Xx Redirection («Перенаправление»)
- •4Xx Client Error («Ошибка клиента»)
- •5Xx Server Error («Ошибка сервера»)
- •Заголовки[править | править вики-текст]
- •Тело сообщения[править | править вики-текст]
- •Основные механизмы протокола[править | править вики-текст] Частичные get[править | править вики-текст]
- •Условные get[править | править вики-текст]
- •Согласование содержимого[править | править вики-текст]
- •Управляемое сервером[править | править вики-текст]
- •Управляемое клиентом[править | править вики-текст]
- •Прозрачное согласование[править | править вики-текст]
- •Множественное содержимое[править | править вики-текст]
- •Особенности протокола[править | править вики-текст]
- •6. Обробка даних html-форм. Способи передачі параметрів сценарію php. Звернення до параметру, переданому з форми Обработка данных из html-форм при помощи php
- •Способы передачи параметров сценарию
- •Передача параметров с помощью html-форм
- •Назначение[править | править вики-текст]
- •Понятие[править | править вики-текст]
- •История[править | править вики-текст]
- •Заблуждения[править | править вики-текст]
- •Работа куки[править | править вики-текст] Установка куки[править | править вики-текст]
- •Атрибуты куки[править | править вики-текст]
- •Условия истечения срока хранения[править | править вики-текст]
- •Аутентификация[править | править вики-текст]
- •Настройка браузера[править | править вики-текст]
- •Приватность и сторонние куки[править | править вики-текст]
- •Недостатки куки[править | править вики-текст]
- •Неточная идентификация[править | править вики-текст]
- •Кража куки[править | править вики-текст]
- •Подмена куки[править | править вики-текст]
- •Межсайтовые куки[править | править вики-текст]
- •Нестабильность между клиентом и сервером[править | править вики-текст]
- •Срок действия куки[править | править вики-текст]
- •Альтернативы куки[править | править вики-текст]
- •Url (строка запроса)[править | править вики-текст]
- •Скрытые поля формы[править | править вики-текст]
- •Http-аутентификация[править | править вики-текст]
- •Сохранение на клиентской стороне[править | править вики-текст]
- •Куки и сессии http
- •Обеспечение безопасности передачи данных http
- •Назначение[править | править вики-текст]
- •Понятие[править | править вики-текст]
- •История[править | править вики-текст]
- •Заблуждения[править | править вики-текст]
- •Работа куки[править | править вики-текст] Установка куки[править | править вики-текст]
- •Атрибуты куки[править | править вики-текст]
- •Условия истечения срока хранения[править | править вики-текст]
- •Аутентификация[править | править вики-текст]
- •Настройка браузера[править | править вики-текст]
- •Приватность и сторонние куки[править | править вики-текст]
- •Недостатки куки[править | править вики-текст]
- •Неточная идентификация[править | править вики-текст]
- •Кража куки[править | править вики-текст]
- •Подмена куки[править | править вики-текст]
- •Межсайтовые куки[править | править вики-текст]
- •Нестабильность между клиентом и сервером[править | править вики-текст]
- •Срок действия куки[править | править вики-текст]
- •Альтернативы куки[править | править вики-текст]
- •Url (строка запроса)[править | править вики-текст]
- •Скрытые поля формы[править | править вики-текст]
- •Http-аутентификация[править | править вики-текст]
- •Сохранение на клиентской стороне[править | править вики-текст]
- •8. Сесії (сеанси) php, основна ідея використання сесій, початок сеансу, завершення сеансу. Ідентифікатор сесії. Змінні сесії
- •Открытие сессии
- •Регистрация переменных сессии
- •Закрытие сессии
- •Пример простой сессии
- •Передача идентификатора сессии
- •9. Багатофайлові сценарії php. Включення файлів, принцип роботи include, include_once, require, require_once
- •10. Створення класу, синтаксис опису. Створення об'єкта Классы и объекты в php
- •11. Успадкування, модель одиночного наслідування. Синтаксис опису класу-нащадка Наследование (программирование)
- •Типы наследования[править | править вики-текст] Простое наследование[править | править вики-текст]
- •Множественное наследование[править | править вики-текст]
- •Единый базовый класс[править | править вики-текст]
- •Наследование в языках программирования[править | править вики-текст]
- •Delphi (Object Pascal)[править | править вики-текст]
- •Python[править | править вики-текст]
- •Php[править | править вики-текст]
- •Objective-c[править | править вики-текст]
- •Java[править | править вики-текст]
- •C#[править | править вики-текст]
- •Ruby[править | править вики-текст]
- •JavaScript[править | править вики-текст]
- •Конструкторы и деструкторы[править | править вики-текст]
- •12. Абстрактний метод, абстрактний клас. Інтерфейс и, призначення, синтаксис опису, реалізація.
- •Содержание
- •Примеры[править | править вики-текст]
- •C#[править | править вики-текст]
- •Описание и использование интерфейсов[править | править вики-текст]
- •Интерфейсы и абстрактные классы[править | править вики-текст]
- •История[править | править вики-текст]
- •Назначение[править | править вики-текст]
- •Концепция[править | править вики-текст]
- •Наиболее частые ошибки[править | править вики-текст]
- •Строковые типы
- •Бинарные данные
- •Целые числа
- •Дробные числа
- •Типы даты и времени
- •Команды sql
- •Типы полей базы данных
- •15. Функції php управління з'єднанням з MySql. Функції php побудови і виконання запитів на сервері MySql. Функції php обробки результату запиту Функции php для работы с MySql
- •16. Область використання .Htaccess ответ 1: Защита сайта с помощью .Htaccess и .Htpasswd
- •Ответ 2:Защита сайта с помощью .Htaccess и .Htpasswd
- •Базовая аутентификация
- •Замечание
- •Замечание
- •Замечание
- •Замечание
- •Создание файла с паролями .Htpasswd
- •Замечание
- •Замечание
- •Защита файлов .Htpasswd
- •Создание файла .Htaccess
- •Пример файла .Htaccess
- •Внимание!
- •Файлы групп
Сохранение на клиентской стороне[править | править вики-текст]
Некоторые веб-браузеры позволяют странице сохранять информацию локально для последующего извлечения. Internet Explorer, например, поддерживает сохранение информации в истории, избранном, XML-хранилище, или позволяет провести прямое сохранение веб-страницы на диск.[32]
Немного отличный механизм используется в браузерах, кэширующих файлы javascript, используемые в веб-странице. Например, страница может содержать ссылку <script type="text/javascript" src="example.js">. С загрузкой страницы загружается и example.js. Затем скрипт кэшируется и не требует загрузки при повторном посещении страницы. В результате, если скрипт содержит такое значение, как id=3243242, этот идентификатор остаётся в силе и может быть использован другим сценарием javascript или другой страницей, запрашивающей этот скрипт.
Куки и сессии http
Куки (cookie) - механизм, работающий через HTTP, позволяющий серверу оставлять на компьютере клиента некоторые данные - "куки". Работает это так:
Клиент отправляет серверу некоторый запрос.
Сервер отвечает клиенту, причём в специальном поле заголовка Set-Cookie указывает данные, которые тем самым "просит" браузер клиента запомнить. (см. пример ответа сервера выше). Данные указываются сервером в виде "имя=значение", причем сервер может попросить клиента сохранить сразу несколько значений под разными именами. Кроме этого, сервер указывает желаемое время жизни куки, в течение которого браузеру следует сохранять куки, а также домен и путь к ресурсу, для которого предназначен куки.
Браузер, получив от сервера Set-Cookie, решает, так уж ли ему нужно хранить эти данные (браузер сверяется с настройками, сделанными пользователем и с политикой безопасности). Если браузер решил данные сохранить, то он запоминает их в особой базе данных для куки. У каждого браузера своя такая база. Каждый куки имеет время жизни, после которого удаляется из базы браузера. Кроме этого, для каждого куки браузер запоминает, с какого домена этот куки был получен: например если вы зашли на labaka.ru и этот сервер выслал вам куки, то именно домен labaka.ru и будет зафиксирован браузером, как источник данного куки.
При последующих запросах, отправляемых к данному сайту, браузер будет отправлять все сохранённые куки для этого домена в поле заголовка Cookie. (см. пример запроса).
В браузере можно посмотреть, какие куки оставил нам сервер. Например, в Firefox достаточно зайти на "правый клик - View Page Info - Security - View Cookies":
Благодаря механизму cookie появляется возможность установить "сессию", или "сеанс" между клиентом и сервером. Сессия - это связная "беседа" клиента и сервера между собой. Рассмотрим на примере:
Вы входите на сайт. Сервер не знает вас, поэтому пишет "Привет, гость". Вы заходите на страницу логина, где вводите свой логин и пароль.
Сервер, получив от вас правильный логин и пароль, теперь знает, что вас зовут Username. Теперь серверу надо как-то запомнить, что на том конце провода находится Username и все последующие запросы от этого клиента - от Username. Сервер, между тем, знает о механизме куков.
Сервер формирует набор данных о клиенте, вошедшем на сайт. Это может быть, например, имя клиента и его номер в базе данных сервера. Этому набору данных сервер придумывает некий уникальный идентификатор, который крайне сложно угадать, например "FUG984ylskjghow87AqoX5U". Набор данных под этим идентификатором сервер запоминает у себя в файле, в памяти или в базе данных: там, откуда эти данные можно быстро извлечь, зная идентификатор. Назовём этот набор данных "данными сессии", а идентификатор - "номером сессии".
Номер сессии сервер отправляет клиенту в виде куки, вместе с веб страницей, на которой отображается сообщение об успешном входе на сайт. Какое будет имя куки, решает сервер: например PHPSESSID. Назовём это именем сессии. Это имя, как правило, будет одинаковым для всех входящих на сайт клиентов. Номера сессий, разумеется, у разных клиентов будут постоянно разные, без повторений.
Браузер запоминает куки с номером сессии и отправляет его обратно серверу с каждым последующим запросом.
Сервер, получая от клиента номер сессии с каждым запросом, находит у себя данные сессии по этому номеру, благодаря чему знает, что это именно Username ходит по сайту, а не кто-то другой. Соответственно, сервер отображает данные, которые следует видеть этому пользователю.
Когда пользователь кликает по кнопке "выйти с сайта", сервер удаляет из памяти данные сессии, соответствующей этому пользователю, и выдаёт браузеру заголовок Set-Cookie, указывая вместо номера сессии пустое значение. Это - сигнал браузеру удалить куки из базы. После этого сессия считается разорванной и пользователь снова видит странички "для анонимусов".
Важные моменты о сессиях, которые следует понимать:
В самом протоколе HTTP нет ни единого упоминания о сессиях: пары "запрос-ответ" HTTP никак не связаны друг с другом. Понятие сессии появляется на более высоком уровне: сессиями управляет веб-приложение, работающее на сервере. HTTP является лишь транспортом для передачи заголовков Set-Cookie/Cookie, а интерпретацией заголовков занимается веб приложение и браузер клиента.
Данные сессии хранятся на сервере, этих данных может быть так много, как требуется веб-приложению. У клиента хранится только номер сессии. Данные сессии на сервере - это "короткоживущие" данные, актуальные только на время сеанса пользователя. Данные клиента, которые надо запоминать надолго, сервер хранит в базе данных или в файлах.
Номер сессии является чрезвычайно ценной информацией, ведь зная этот номер, можно "представиться" серверу некоторым пользователем, даже не являясь им. Для этого достаточно каким-либо способом украсть номер сессии (перехватить HTTP-трафик пользователя-жертвы, или, если он не понимает что делает, попросить его сообщить вам свой номер сессии, скопировав его из браузера). Для предотвращения перехвата используется протокол HTTPS, при котором весь трафик между клиентом и сервером надёжно шифруется.
Номер сессии может передаваться не только через Cookie, но и, в некоторых случаях, через параметры URL вида "http://какой-то-то-сайт.ком/?PHPSESSID=FUG984ylsk". Адрес такого вида должен являться для пользователя сверхсекретным, ибо содержит информацию, которая идентифицирует данного пользователя на сервере.
