Одржавање стања између HTTP захтева¶
HTTP протокол се сматра протоколом без стања, што значи да је сваки пар захтева и одговора међусобно независан један од другог. Приликом слања новог захтева, веб-сервер не складишти информације о претходним захтевима које је исти клијент послао. Последица ове особине је та да је клијент у обавези да укључи све неопходне информације у оквиру тог захтева како би се неки HTTP захтев могао успешно обрадити од стране веб-сервера.
Овакво понашање има неке очигледне недостатке. Замисли да је потребно да имплементираш електронску продавницу. Без могућности одржавања стања између HTTP захтева и одговора, корисници би били принуђени да купују један-по-један производ уместо да све производе које желе да купе ставе у „корпу“ и плате их одједном по завршетку разгледања каталога. Слично, коришћење друштвене мреже без могућности памћења који је то корисник који је тренутно пријављен на систем, захтевало би да, приликом посећивања сваке странице у оквиру друштвене мреже, корисник изнова и изнова уноси своје корисничко име и лозинку.
На срећу, постоје механизми који су се установили у развоју веб-апликација, а који омогућавају складиштење стања између парова HTTP захтева и одговора. Два најпопуларнија механизма су колачићи и сесије.
Колачићи¶
Колачићи (cookies) представљају податке који су складиштени на клијентској страни у оквиру HTTP комуникације (најчешће у оквиру веб-прегледача) од стране неког веб-сајта. Једном када се колачићи ускладиште, они се шаљу уз сваки HTTP захтев. Колачићи су обично подаци мале величине, као што су: корисничка подешавања, токени за управљање приступом, садржај „корпе“ за куповину, итд. Ипак, с обзиром на то да се колачићима може приступити из веб-прегледача (видећеш како у делу када се будемо бавили развојем серверских апликација), не препоручује се складиштење поверљивих информација као што су: лозинке, бројеви кредитних картица, итд. у колачићима
Колачићи имају разне особине:
Име (name): јединствени назив колачића.
Вредност (value): вредност колачића.
Домен (domain): адресе имена домена за које колачић важи.
Време истека (expires / max-age): време након којег се колачић сматра застарелим и брише се аутоматски из веб-прегледача. Време може бити задато као датум истека или може бити повезано са сесијом веб-прегледача (тј. колачић истиче када се веб-прегледач затвори).
Индикатор HttpOnly: ако је постављен, вредношћу колачића се не може приступити из кода који се извршава у оквиру веб-прегледача.
Индикатор Secure: ако је постављен, захтева се коришћење HTTPS протокола за пренос колачића.
Одредница слања колачића (SameSite): атрибут којим се контролише када ће веб-прегледач послати колачић. Може бити постављен на једну од наредних опција: Strict (шаље се само уз захтеве ка истом веб-сајту), Lax (шаље се уз захтеве ка истом веб-сајту и ка сигурним захтевима ка другим веб-сајтовима) или None (шаље се уз све захтеве).
Сесије¶
Сесије (session) омогућавају складиштење информација о корисничким захтевима на серверској страни HTTP комуникације. Сесија се обично успоставља додељивањем јединственог идентификатора сесије први пут када корисник приступи веб-сајту. Овај идентификатор сесије се обично складишти у колачићу како би се сваким следећим захтевом идентификовао корисник на основу идентификатора сесије.
С обзиром на то да се информације о сесији складиште на страни веб-сервера (са изузетком идентификатора сесије), у оквиру сесије је могуће складиштити разне информације, па чак и оне које су поверљиве природе. Ипак, то не значи да је корисник у потпуности безбедан. Уколико треће лице из колачића прочита идентификатор сесије, онда се може лажно представити као корисник-жртва. Важно је пажљиво одабрати особине колачића како би се корисници исправно заштитили од разних врста сајбер напада.