коду використовується наступні рішення:—
після успішного завершення процесу аутентифікації на сервері створюється тимчасовий файл сеансу із необхідними даними про адміністратора системи;—
генерація динамічних web-сторінок підсистеми відбувається згідно даних, що є у файлі сеансу.
Для визначення можливості виконання даної частини програми, для кожного із адміністраторів виконується перевірка змінних сеансу згідно нижче наведеного коду.
If ($_SESSION['adm_priv'] != ROOT) {
header("Location: index.php");
}
При негативному результаті виконання даної умови, адміністратор із рівнем привілеїв $_SESSION['adm_priv'] має право доступу на виконання відповідної частини програмного коду.
Особливо важливою задачею є забезпечення цілісності інформації в базі даних, тут розуміється те, що наприклад, під час проходження тестового контролю студентами, адміністратор не може виконувати такі операції, як модифікація відповідного тестового блоку, інформації про користувачів і т. п. Для цього перед виконанням відповідної частини програмного коду, що відповідає за ці операції, відбувається перевірка наявності активних сеансів. В таблиці активних сеансів зберігається інформація про тестові блоки завдань і користувачів, які в даний момент часу проходять тестування.
3.5.3 Підсистема тестування
Як показано на схемі 3.10 деякі блоки це підпрограми реалізації алгоритмів випадкового вибору завдань і варіантів. Саме завдяки цим алгоритмам вирішується проблема формування пакетів завдань для користувачів, які будуть дещо або значно відрізнятися один від одного (в залежності від наповнення бази даних).
Після того як користувач увійшов в систему, на сервері формується файл сеансу, який зв’язується з даним користувачем. У файлі сеансу зберігається інформація про користувача, вибраний тест, а також інформація про всі завдання даного тесту, які будуть задані користувачу. Після реєстрації сеансу, починає роботу алгоритм випадкового формування вибірки завдань, елементами вибірки є унікальні номери завдань, які вибираються з бази даних. Слід зазначити, що в даній тестовій системі підтримується класифікація питань по групам (рівням), це дозволяє сформувати тест для проведення так званого проміжного контролю знань по декільком темам, звичайно, що можна створити простий тест без поділу питань на групи, але в термінах даної системи відповідні завдання будуть відноситися до однієї із груп. По замовчуванню максимальний рівень групування завдань – 20, але згідно організації бази даних максимальне число може бути 255. Слід також зауважити, що при використанні групування завдань, мінімальне число зареєстрованих питань має бути не меншим за кількість завдань зареєстрованих в таблиці додаткових параметрів тесту для даного рівня завдання. На рисунку 3.16 наведена схема алгоритму випадкового вибору завдань.
Як видно з блок-схеми спочатку робиться запит до таблиці test_details бази даних на наявність зареєстрованих додаткових параметрів для даного тестового блоку завдань, результатом запиту буде число, яке буде вказувати, що дана інформація є зареєстрована. Якщо дане число рівне нулю, то це означає, що даний тестовий блок складається із завдань лише нульового рівня. Розглянемо гілку алгоритму, якщо виконується умова наявності зареєстрованої інформації в таблиці test_details.
Рисунок 3.16 – Схема алгоритму випадкового вибору завдань—
формується цикл від нуля до числа зареєстрованих записів в таблиці test_details;—
формується запит до бази даних для видачі кількості зареєстрованих завдань деякого рівня, якщо один із результатів запитів буде false, програма видасть діагностичне повідомлення про помилку і завершить роботу; —
вся інформація, що була визначена на попередньому кроці переписується у файл сеансу;—
формується цикл від 0 до кількості зареєстрованих записів в таблиці test_details;—
формується запит до бази даних на видачу ідентифікаторів завдань деякого рівня з сортуванням у випадковому порядку (використовується функція СУРБД MySQL RAND());—
після закінчення виконання циклу вся інформація, що була визначена переписується у спеціальну змінну сеансу $_SESSION['quests'].
Вище перелічені операції справедливі лише для тестів де використовується групування завдань.
Особливу увагу слід звернути на функцію shuffle(), дана функція випадковим чином робить перестановку елементів масиву наприклад:
$array = (1,2,3,4,5,6,7,8,9,10);
Shuffle ($array);
// $array = (5,7,6,9,1,4,3,2,10,8).
Таким чином відбувається перестановка варіантів відповідей на запитання. Формується масив значень від 1 до кількості зареєстрованих варіантів відповідей на дане завдання (лише у випадку завдань у закритій формі), після чого до масиву застосовується функція shuffle(). Після проведення всіх цих операцій їхній результат записується у файл сеансу. По закінченню тестування користувачу виставляється оцінка, видаляється файл сеансу, інформація записується до бази даних. Розглянемо детальніше структуру файлу сеансу. Файл сеансу призначений для тимчасового зберігання будь-якої текстової інформації. Вся інформація у файлі сеансу зберігається у вигляді наступної структури: <VAR_NAME>|<VAR_TYPE>:[<VAR_LENGTH>]:<VAR_VALUE>;. —
VAR_NAME – ім’я змінної, дане ім’я це індекс суперглобального масиву $_SESSION;—
VAR_TYPE – тип даних змінної, доступні наступні значення: i – ціле число; f – число з плаваючою комою; s – текстова змінна;—
VAR_LENGTH – довжина (розмір), даний параметр встановлюється лише для змінних текстового типу;—
VAR_VALUE – значення змінної;
Як вже зазначалось раніше механізм сеансів дозволяє повністю розділити роботу користувачів, які в даний момент працюють в системі. Згідно внутрішніх алгоритмів роботи інтерпретатора РНР максимально можливе число працюючих в даний момент користувачів 3632. На рисунку 3.17 показано структуру сформованого системою файлу сеансу для деякого користувача.
Рисунок 3.17 – Структура файлу сеансу
Розглянемо детальніше проблему захисту конфіденційної інформації. Як вже зазначалось раніше спроектована система працює в мережі з використанням засобів, що пропонує сервіс мережі Internet/Intranet.
Користувач за допомогою програми навігатора по мережі Internet може проглянути текст сформованої web-сторінки. Як зазначалось в розділі 1.5 для спрощення алгоритмів і зменшення навантаження на web-сервер більшу частину важливої інформації переміщено на web-сторінку в "натуральному" вигляді. Даний прийом дозволяє значно зменшити роботу модуля інтерпретатора по виконанню алгоритмів, в яких є дуже багато розгалужень. Слід зауважити ще одне, так як для кожного