Яка найактуальніша, найкраща практика та найпростіший спосіб використовувати сесії в PHP? - php, сесія

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

Відповіді:

3 для відповіді № 1

Керування сесіями дещо змінилося (Iдумаю, це було близько 4.4). Старий механізм все ще працює, але застарілий. Це досить незрозуміло, тому я рекомендую залишатись вільним від нього. Сьогодні ви використовуєте сесії, звертаючись до глобальної змінної $ _SESSION (це масив). ви може помістіть екземпляри об'єкта в ту, але вам потрібно завантажити визначення класів для цих об'єктів перед початком сеансу на наступній сторінці. Використовуючи автозавантаження може допомогти вам тут.

Ти повинен почати сеанс перш ніж ви зможете використовувати $ _SESSION.Оскільки запуск сеансу відправляє заголовки, ви не можете мати будь-який вихід раніше. Це можна вирішити одним із двох способів: Ви завжди починаєте сесію на початку вашого сценарію. Або ти буфер всі виходи, і надішліть його в кінці скрипту.

Одна гарна ідея - відновити сеанс за кожним запитом. це робить викрадення набагато рідше.

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

Використання сеансів на основі файлів cookie тільки це добре, але якщо ви відновлюєте ідентифікатор сеансу під час входу в систему, він не додає додаткової безпеки, а трохи знижує доступність.


2 для відповіді № 2

Що стосується простоти, то вона не краще, ніж:

# Start the session manager
session_start();

# Set a var
$_SESSION["foo"] = "whatever";

# Access the var
print $_SESSION["foo"];

1 для відповіді № 3

Хоча база даних може бути більш безпечною для сеансів,ви повинні зосередити увагу на тому, що ви зберігаєте в сесії в першу чергу - воно насправді не повинно містити нічого, окрім ідентифікатора, щоб ідентифікувати користувача (і МОЖЕ мати ім'я або тимчасову змінну між сторінками).

Я б просто запропонував використовувати файли cookie за замовчуванням.Сесії бази даних дають додатковий удар НА КОЖНУ СТОРІНКУ, і хоча не кожен сайт є Slashdot, це не завдає шкоди при попередньо оптимізації чогось такого простого, як це.

Для використання я б рекомендував стандартну глобальну змінну:

$_SESSION["yourvar"] = "somevalue";

Якщо ви використовуєте цей метод у всьому вашому коді, ви можете легко змінити фоновий файл пізніше за допомогою session_set_save_handler, що дає єдиний спосіб реалізаціїсесійні бекенда Зауважте, що ви можете використовувати об'єкт, щоб містити всі обробки сеансу, просто дайте масиви для кожного запису - масив ("Staticclass", "staticmethod").

Для більш глибокого використання, я б рекомендував ознайомитись з тим, як обробляються сеанси KohanaPHP.


0 для відповіді № 4

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


0 для відповіді № 5

Інкапсуліруйте масив $ SESSION в сеансі ()Об'єкт, який дозволяє отримувати змінні з сеансу, отримувати та публікувати з подібним (але дисоціюватим) способом, включаючи автоматичні фільтри безпеки, флеш-змінні (var, які використовуються один раз, потім distroyed) та встановлювачі значення за замовчуванням.

Подивіться на поведінку Symfony на цьому етапі, це дуже корисно.


0 для відповіді № 6

Сесії були критичною частиною мого знання PHP, тому що це допомогло мені вирішити проблему автентифікації в журналі під час розробки моєї першої веб-програми.

session_start();
if( isset($_POST["username"]) && isset($_POST["password"]) )
{
if( auth($_POST["username"], $_POST["password"]) )
{
//Authentication passed
$_SESSION["user"] = $_POST["username"];
// redirect to required page
header( "Location: index.php" );
}
else
{
//Authentication failed redirect to login
header( "Location: loginform.html" );
}
}
else
{
//Username and Password are required
header( "Location: loginform.html" );
}

-1 для відповіді № 7

Спочатку використовуйте файли cookie лише за наявностідуже конкретна хороша комерційна причина, щоб не. У мене був клієнт, який наполягав на сеансах на основі url лише для проекту. дуже небезпечна і біль працювати.

Одна гарна ідея - відновити сеанс за кожним запитом. це робить викрадення набагато рідше. Наприклад.

session_start();
$old_sessionid = session_id();
session_regenerate_id();
$new_sessionid = session_id();

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


Схожі запитання
Найбільш популярний