ПредишенСледващото

В различни конференции, посветени на програмиране в първият ми интересуват от такива теми, като "уеб-програмиране" и "Scripts". В по-голямата си част, за PHP въпроси в такива форуми е съвсем проста, изисква само общи познания за PHP, обаче, най-често задаваният въпрос в моя опит, е: "Какво е сесия в PHP и какво / как те могат да се хранят?". Бих искал да се изясни този въпрос веднъж завинаги.

От самото начало, PHP всичко се гръм и трясък, но веднага след като езикът започва да се създаде достатъчно големи проекти, разработчиците са изправени пред нов проблем - в PHP няма понятие за глобални променливи! Това означава, че тя изпълнява скрипт, изпращане на генерираната страница на клиента, както и всички ресурси, използвани от този сценарий са били унищожени. Ще се опитам да илюстрирам: Да предположим, че има две страници на една и съща площадка, на index.php и dothings.php. Източници за тази страница изглежда така:

$ A = "Бях помолен да index.php";

Ако следвате тези две скриптове, можем да видим надпис "Бях помолен да index.php" на първа страница и на втората страница е празен.

Аз няма да отида в технологичните аспекти на заседанията на механизма на устройството и ще опише само как се работи с сесии в PHP.

Как да работим с сесии?

Ако тествате примери от статията (или вашите скриптове) по всяка търговска хостинг, проблеми с работата на сесиите не трябва да бъде. Ако все пак се създаде вашия сървър (без значение дали той е истински сървър, или емулатор), може да се появи съобщение за грешка, това съдържание:

"Внимание: отворена (/ Var / щат / PHP / sess_6f71d1dbb52fa88481e752af7f384db0, O_RDWR) не успя: Няма такъв файл или директория (2)."

Това просто означава, че сте правилно конфигуриран PHP. Може ли да реши този проблем, като напишете правилния начин (в съществуваща директория) за съхранение на сесии във файла php.ini и да рестартирате сървъра.

Всеки скрипт, който ще използва променливи (данни) от заседанията трябва да съдържа следния ред:

Тази команда казва на сървъра, който тази страница се нуждае от всички променливи, които са свързани с определен потребител (браузър). Сървърът е на peremnnye (от файл или от база данни) и ги прави достъпни. Това е много важно, за да отворите сесия преди каквито и да било данни, ще бъде изпратено до потребителя; На практика това означава, че функцията session_start (), е желателно да се предизвика самото начало на страницата, като този:

След сесията, можете да настроите глобални променливи. Това е проста: обадете session_register функция ( "var_name '); и променливата $ var_name е достъпно на всички страници, които използват сесия. За пример програма от нулата с, както е посочено в началото на статията:

// задаване на променливата

$ A = "Бях помолен да index.php";

// регистрира променлива с открито заседание

// важна променлива име преминал функция session_register ()

Всичко ОК. Сесията е зареден!

В началото на файла (в логична последователност, разбира се), първата версия на сценария (index.php) произвежда до следния резултат:

Всичко ОК. Сесията е зареден! Да вървим, нека да видим какво има:

Втори (dothings.php) ето го:

Бях помолен да index.php

променлива $ А, сега е на разположение на всички страници от сайта, който стартира сесията.

Други полезни функции за работа с сесии:

session_unregister (низ) - Session <забывает> предварително определена стойност на глобална променлива;

session_destroy () - сесия се унищожават (например, ако потребителят напуска системата, като натиснете <выход>);

session_set_cookie_params (вътр през целия живот [, низ пътя [, низ домейн]]) - с помощта на тази функция можете да зададете колко дълго воля <жить> сесия, задавайки unix_timestampopredelyayuschy време <смерти> сесия. По подразбиране, на сесията <живёт> нагоре, докато клиентът се затваря прозореца на браузъра.

Сега е ред практически механизъм за кандидатстване сесии. Нека да разгледаме няколко сравнително лесно и в същото време полезни примери.

Въведете парола, смърт

Потребителско име:

парола:

// данни е изпратена форма?

// проверка на данните за коректност. в този случай аз

// влезе вашето потребителско име и парола директно в кода, че е по-целесъобразно

// ще бъде да се провери име / парола в база данни и sov-

// съхранява потребителското име

// и го препраща към <секретную> страница.

Здравейте, , вие сте на една тайна страница. )

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

на компютърни щандове на потребителя <троян>, който краде идентификационния номер на сесията;

хакер закръгляването на трафика между вашия компютър и сървъра. Разбира се, не е сигурна (криптирана) SSL протокол, но те не са всичко;

за потребителя на компютъра на нашия съсед дойде и извади номера на сесия.

Подобна ситуация, въз основа на факта, че някой има нещо някой е изтеглен, като цяло, не са включени в компетентността на програмиста. Това трябва да се грижи за администраторите и потребителите.

authorize.php File - опитвайте кракване на пароли от сценария на трета страна;

Така че нашата програма е ясно видима две <дыры>, една малка и не много забележим, но втората - просто огромен, чрез които по-голямата част от хакери и изкачвания, където не е необходимо.

как <залатать> отвор номер 1?

// пълния път до главната директория, където скриптове

// ако потребителят влезе от всяка страница на нашия сайт

// това е като нашата.

// променлива $ HTTP_REFERER е винаги на разположение по подразбиране

// със стойността на променливата $ SERVER_ROOT

// данни е изпратена форма?

Свързани статии

Подкрепете проекта - споделете линка, благодаря!