ПЕРЕЛІК ДИСЦИПЛІН:
  • Адміністративне право
  • Арбітражний процес
  • Архітектура
  • Астрологія
  • Астрономія
  • Банківська справа
  • Безпека життєдіяльності
  • Біографії
  • Біологія
  • Біологія і хімія
  • Ботаніка та сільське гос-во
  • Бухгалтерський облік і аудит
  • Валютні відносини
  • Ветеринарія
  • Військова кафедра
  • Географія
  • Геодезія
  • Геологія
  • Етика
  • Держава і право
  • Цивільне право і процес
  • Діловодство
  • Гроші та кредит
  • Природничі науки
  • Журналістика
  • Екологія
  • Видавнича справа та поліграфія
  • Інвестиції
  • Іноземна мова
  • Інформатика
  • Інформатика, програмування
  • Юрист по наследству
  • Історичні особистості
  • Історія
  • Історія техніки
  • Кибернетика
  • Комунікації і зв'язок
  • Комп'ютерні науки
  • Косметологія
  • Короткий зміст творів
  • Криміналістика
  • Кримінологія
  • Криптология
  • Кулінарія
  • Культура і мистецтво
  • Культурологія
  • Російська література
  • Література і російська мова
  • Логіка
  • Логістика
  • Маркетинг
  • Математика
  • Медицина, здоров'я
  • Медичні науки
  • Міжнародне публічне право
  • Міжнародне приватне право
  • Міжнародні відносини
  • Менеджмент
  • Металургія
  • Москвоведение
  • Мовознавство
  • Музика
  • Муніципальне право
  • Податки, оподаткування
  •  
    Бесплатные рефераты
     

     

     

     

     

     

         
     
    Сесії в PHP
         

     

    Інформатика, програмування

    Сесії в PHP

    В різноманітних конференціях, присвячених програмуванню мене в першу чергу завжди цікавлять такі розділи, як "Web-програмування" та "Скрипти". Здебільшого, питання про PHP в таких форумах досить прості, які вимагають лише загального розуміння PHP, тим не менше, найбільш часто задається питання за моїми спостереженнями, це: "Що таке сесії в PHP і з чим/як їх можна їсти? ". Хотілося б роз'яснити це питання раз і назавжди.

    З самого початку PHP всі прийняли на ура, але як тільки на цій мові стали створювати достатньо великі проекти, розробники зіткнулися з новою проблемою - в PHP було відсутнє поняття глобальних змінних! Тобто, виконувався якийсь скрипт, посилав згенеровану сторінку клієнту, і все ресурси, що використовуються цим скриптом знищувалися. Спробую проілюструвати: припустимо є дві сторінки одного сайту, index.php і dothings.php. Исходники до цих сторінках виглядають так:

    -- index.php -

    - dothings.php -

    Якщо виконати ці два скрипта, то на першій сторінці ми побачимо напис "Мене поставили на index.php ", а друга сторінка буде пустою.

    Розробники web-сайтів, не довго думаючи, стали використовувати cookie для зберігання глобальних змінних на стороні клієнта. Процес виглядав приблизно так: користувач приходить на головну сторінку сайту, робить якісь дії, і вся інформація, пов'язана з цим користувачем, що може знадобитися на інших сторінках сайту, буде зберігатися у нього в браузері у вигляді cookie. Цей метод розуміється досить серйозні мінуси, через які від PHP свого часу відвернулася чимало розробників. Наприклад, нам потрібно схвалити користувача, щоб дозволити йому доступ до закритих (чи належить тільки йому) розділів сайту. Доведеться  користувачеві cookie, який служить його подальшим ідентифікатором на сайті. Такий підхід стає дуже громіздким і не зручним, як тільки сайт починає збирати все більше і більше відомостей про поведінку користувача, адже всю інформацію, що їх посилають користувачеві, бажано кодувати, щоб її не можна було підробити. Ще зовсім недавно підробкою cookie можна було не один чат, а часом і пробратися в чужу пошту. До того ж є ще на світі дивні люди, у яких браузер cookie НЕ підтримує.

    При використанні сесій вся інформація зберігається не на стороні клієнта, а на стороні сервера, і тому краще захищена від маніпуляцій зловмисників. Та й працювати з сесіями куди простіше і зручніше, так як всі дані автоматично проходять через алгоритми криптографії модуля PHP. У броузері клієнта, лише зберігається унікальний ідентифікатор номера сесії, або у формі cookie, або в вигляді змінної в адресному рядку браузера, який із двох способів використовувати для передачі ідентифікатора сесії між сторінками інтерпретатор PHPвибірает сам. Це на 100 безпечно, так як ідентифікатор сесії унікальний, і підробити його практично неможливо (про це трохи далі, в розділі про безпеку сесій).

    Я не буду вдаватися в технологічні питання пристрої механізму роботи сесій, а тільки опишу, як правильно працювати з сесіями в PHP.

    Як працювати з сесіями?

    Якщо ви будете тестувати приклади зі статті (або ваші скрипти) на якому-небудь комерційному хостингу, проблем з роботою з сесіями бути не повинно. Якщо ж ви самі налаштовували ваш сервер (будь то реальний сервер, або емулятор), можуть з'являтися помилки приблизно такого змісту:

    "Warning: open (/ var/state/php/sess_6f71d1dbb52fa88481e752af7f384db0, O_RDWR) failed: No such file or directory (2 )".

    Це означає лише, що у вас неправильно налаштований PHP. Вирішити цю проблему можна, прописавши правильний шлях (на існуючу директорію), щоб зберегти сесій у файлі php.ini і перезапустити сервер.

    Будь-який скрипт, який буде використовувати змінні (дані) з сесій, повинен містити наступну рядок:

    Ця команда говорить серверу, що дана сторінка має потребу у всіх змінних, які пов'язані з даним користувачем (браузером). Сервер бере ці перемнние (з файлу, або з БД) і робить їх доступними. Дуже важливо відкрити сесію до того, як будь-які дані будуть надсилатися користувачеві; на практиці це значить, що функцію session_start () бажано викликати на самому початку сторінки, наприклад так:

    ...

    Після початку сесії можна задавати глобальні змінні. Це елементарно: викликаємо функцію session_register ( 'var_name'); та змінна $ var_name стає доступною на всіх сторінках, що використовують сесію. Для прикладу покорписав програмку, наведену на початку статті:

    -- index.php -

    Всі ОК. Сесію завантажили!

    Пройдемо, подивимося що там:

    -- dothings.php -

    При запуску цих файлів (в логічній послідовності звичайно), перший скрипт (index.php) видасть такий результат:

    Всі ОК. Сесію завантажили! Пройдемо, подивимося що там:

    А другий (dothings.php) ось це:

    Мене поставили на index.php

    Змінна $ a тепер доступна на всіх сторінках даного сайту, які запустили сесії.

    Інші корисні функції для роботи з сесіями:

    session_unregister (string) - Сесія значення заданої глобальної змінної;

    session_destroy () - Сесія знищується (наприклад, якщо користувач покинув систему, натиснувши кнопку);

    session_set_cookie_params (int lifetime [, string path [, string domain]])-за допомогою цієї функції можна встановити, як довго буде сесія, задавши unix_timestampопределяющій час сесії. За замовчуванням, сесія  до тих пір, поки клієнт не закриє вікно браузера.

    Приклади

    Тепер звернемося до практичного застосування механізму сесій. Давайте розглянемо пару досить простих і в той же час корисних прикладів.

    Авторизація Користувача

    Питання по авторизації користувачів за допомогою PHP-сесій постійно задаються у конференціях з web-програмування. Механізм авторизації користувачів в системи за допомогою сесій досить хороший з точки зору безпеки (див. розділ  нижче).

    Наш приклад буде складатися з трьох файлів: index.php, authorize.php і secretplace.php. Файл index.php містить форму, де користувач введе свій логін та пароль. Ця форма передасть дані файлу authorize.php, який у разі успішної авторизації допустить користувача до файлу secretplace.php, а в Інакше видасть повідомлення про помилку.

    Приступимо: - index.php -

    Введи пароль, смертний

    Логін:

    Пароль:

    - authorize.php -

    Ви ввели невірний пароль!

    -- secretplace.php -

    Привіт, , Ти на секретній сторінці!!! :)

    Безпека

    Отже, ми вміємо передавати ідентифікатор від однієї сторінки (PHP-скрипта) до іншої (до наступного виклику з нашого сайту), а значить ми можемо розрізняти всіх відвідувачів сайту. Так як ідентифікатор сесії - це дуже велике число (128 біт), шансів, що його вдасться підібрати перебором, практично немає. Тому зловмисникові залишаються наступні можливості:

    на комп'ютері користувача стоїть, який краде номера сесій;

    зловмисник відловлює трафік між комп'ютером користувача і сервером. Звичайно, є захищений (зашифрований) протокол SSL, але ним користуються не всі;

    до комп'ютера нашого користувача підійшов сусід і стягнув номер сесії.

    Такі ситуації, засновані на тому, що хто-то что-то у кого-то стягне, загалом, не входять до компетенції програміста. Про це повинні піклуватися адміністратори і самі користувачі.

    Втім, PHP дуже часто можна. Давайте розглянемо можливі точки злому в програмі авторизації користувача:

    Файл authorize.php - спроба підбору пароля за допомогою стороннього скрипта;

    Файл secretplace.php - спроба обдурити програму шляхом вписування значень змінної $ logged_user в адресному рядку браузера, наприклад так:

    http://www.yoursite.ru/secretplace.php?logged_user=hacker

    Отже, в нашій програмі явно видно дві, одна маленька і не особливо помітна, а от друга - просто величезна, через яку більшість хакерів і лізе туди, куди не треба.

    Як  дірку номер 1?

    Не будемо писати тонни коду за блокування IP-адреси і т.п., а просто перевіримо, звідки приходить запит, а точніше з якої сторінки прийшов запит, якщо це буде будь-яка сторінка з нашого сайту, то все нормально, а у всіх інших випадках пускати не будемо. Підкоригуємо файл authorize.php:

    -- authorize.php V2 -

    Ви ввели невірний пароль!

    Як позбутися номер 2?

    Припустимо, у вас є сайт, де кожен смертний може зареєструватися щоб додавати повідомлення в форум. Природно, у форумі у деяких користувачів (адмінів, модераторів), можливостей більше ніж у інших, вони, наприклад, можуть видаляти повідомлення інших користувачів. Рівень доступу користувача ви зберігаєте в сесії, у змінній $ user_status, де $ user_status = 10 відповідає повному доступу до системи. Що прийшли на сайт зловмиснику досить зареєструватися штатним чином, а потім дописати в адресному рядку браузера ? user_status = 10. От і завівся у вас на форумі новий адмін!

    В принципі, будь-яку змінну скрипта можна задати через адресний рядок, просто дописав після повної адреси до скрипта знак питання і назва змінної з її значенням. Давайте виправимо наш код, щоб цього уникнути:

    -- secretplace.php V2 -

    Привіт, , Ти на секретній сторінці!!! :)

    Підсумки

    Механізм сесій - досить вдала особливість мови PHP. Сесій зростання, дуже гнучкі в використанні. До речі, є одна, мало де документована можливість сесій PHP (доступна починаючи з версії 4.0.3) - у сесіях можна зберігати не тільки змінні, а й об'єкти.

    Додавання від 14.12.2001

    З виходом у світ PHP 4.1.0 - робота з сесіями значно полегшилася. Всі змінні сесій стали доступні з глобального масиву _SESSION [ 'var_name']. Найприємніше напевно в тому, що при присвоєнні якого-небудь значення будь-якого полю масиву, змінна з таким же ім'ям автоматично реєструється, як мінлива сесії, на пр:

    виведе на екран броузера число 12.

    Список літератури

    Для підготовки даної роботи були використані матеріали з сайту http://phpcell.webhost.ru/

         
     
         
    Реферат Банк
     
    Рефераты
     
    Бесплатные рефераты
     

     

     

     

     

     

     

     
     
     
      Все права защищены. Reff.net.ua - українські реферати ! DMCA.com Protection Status