Mbrojtja e ID-së së sesionit në PHP. Sesionet në deklaratën e privatësisë së PHP

10.08.2022

Përshëndetje, komunitet i dashur.

Së pari, dua t'ju falënderoj për shumë burim i dobishëm. Më shumë se një herë kam gjetur shumë ide interesante dhe këshilla praktike këtu.

Qëllimi i këtij artikulli është të nxjerrë në pah kurthet e përdorimit të seancave në PHP. Sigurisht, ka dokumentacion për PHP dhe shumë shembuj, dhe ky artikull nuk pretendon të jetë udhëzues i plotë. Është krijuar për të zbuluar disa nga nuancat e punës me sesione dhe për të mbrojtur zhvilluesit nga humbja e panevojshme e kohës.

Shembulli më i zakonshëm i përdorimit të sesioneve është, natyrisht, autorizimi i përdoruesit. Le të fillojmë me zbatimin më themelor, në mënyrë që ta zhvillojmë gradualisht ndërsa lindin detyra të reja.

(Për të kursyer hapësirë ​​dhe kohë, ne do t'i kufizojmë shembujt tanë vetëm në vetë funksionet e sesionit, në vend që të ndërtojmë këtu një aplikacion testimi të plotë me një hierarki të bukur të klasës, trajtim gjithëpërfshirës të gabimeve dhe gjëra të tjera të mira).

Funksioni startSession() ( // Nëse sesioni ka filluar tashmë, ndaloni ekzekutimin dhe kthejeni TRUE // (parametri session.auto_start në skedarin e cilësimeve php.ini duhet të çaktivizohet - vlera e paracaktuar) nëse (session_id()) kthehet true; else return session_start( // Shënim: Përpara versionit 5.3.0, funksioni session_start() ktheu TRUE edhe nëse kishte një gabim // Nëse jeni duke përdorur një version më të hershëm se 5.3.0, bëni një kontroll shtesë për session_id() // pas thirrjes së funksionit session_start() shkatërrojëSession() ( if (session_id()) ( // Nëse ka seancë aktive, fshini kukit e sesionit, setcookie(emri_sesionit(), sesioni_id(), koha()-60*60*24); // dhe shkatërroni sesionin session_unset(); sesion_shkatërrim(); ))

Shënim: Nënkuptohet se njohuri baze Lexuesi di për sesionet PHP, kështu që ne nuk do të mbulojmë këtu parimin e funksionimit të funksioneve session_start() dhe session_destroy(). Detyrat e paraqitjes së formularit të hyrjes dhe vërtetimi i përdoruesit nuk lidhen me temën e artikullit, kështu që ne gjithashtu do t'i heqim ato. Më lejoni t'ju kujtoj se për të identifikuar përdoruesin në çdo kërkesë pasuese, në momentin e hyrjes me sukses, duhet të ruajmë identifikuesin e përdoruesit në një variabël sesioni (për shembull, me emrin userid), i cili do të jetë i disponueshëm në të gjitha kërkesat pasuese brenda jeta e seancës. Është gjithashtu e nevojshme të zbatohet përpunimi i rezultatit të funksionit tonë startSession(). Nëse funksioni kthehet FALSE, shfaqni formularin e hyrjes në shfletues. Nëse funksioni u kthye TRUE, dhe një variabël sesioni që përmban identifikuesin e përdoruesit të autorizuar (në rastin tonë - userid), ekziston - shfaqni faqen e përdoruesit të autorizuar (për më shumë informacion rreth trajtimit të gabimeve, shihni shtimin e datës 2013-06- 07 në seksionin mbi variablat e sesionit).

Deri këtu gjithçka është e qartë. Pyetjet fillojnë kur ju duhet të zbatoni kontrollin e pasivitetit të përdoruesit (përfundimi i sesionit), të mundësoni përdorues të shumtë të punojnë njëkohësisht në një shfletues dhe gjithashtu të mbroni seancat nga përdorimi i paautorizuar. Kjo do të diskutohet më poshtë.

Monitorimi i pasivitetit të përdoruesit duke përdorur mjete të integruara PHP

Pyetja e parë që shpesh lind midis zhvilluesve të të gjitha llojeve të konzollave për përdoruesit është përfundimi automatik i seancës në rast të pasivitetit nga ana e përdoruesit. Nuk ka asgjë më të lehtë sesa ta bëni këtë duke përdorur aftësitë e integruara të PHP. (Ky opsion nuk është veçanërisht i besueshëm ose fleksibël, por ne do ta konsiderojmë atë për plotësinë).

Funksioni startSession() ( // Koha e paaktivitetit të përdoruesit (në sekonda) $sessionLifetime = 300; nëse (session_id()) kthehet e vërtetë; // Cakto jetëgjatësinë e kukive ini_set("session.cookie_lifetime", $sessionLifetime); // Nëse përdoruesi caktohet koha e mbylljes së pasivitetit, caktoni jetëgjatësinë e sesionit në server // Shënim: Për një server prodhimi, rekomandohet të paracaktoni këto parametra në skedarin php.ini nëse ($sessionLifetime) ini_set("session.gc_maxlifetime", $sessionLifetime nëse (sesion_start(); )) ( setcookie(sesion_name(), session_id(), time()+$sessionLifetime); kthen true; ) përndryshe kthe false)

Disa sqarime. Siç e dini, PHP përcakton se cili sesion duhet të nisë nga emri i cookie-t të dërguar nga shfletuesi në kokën e kërkesës. Shfletuesi, nga ana tjetër, e merr këtë cookie nga serveri, ku funksioni session_start() e vendos atë. Nëse cookie-i i shfletuesit ka skaduar, ai nuk do të dërgohet në kërkesë, që do të thotë se PHP nuk do të jetë në gjendje të përcaktojë se cilin sesion të fillojë dhe do ta trajtojë këtë si krijimi i një sesioni të ri. Parametri i cilësimeve të PHP-së session.gc_maxlifetime, i cili është vendosur i barabartë me kohën tonë të mosaktivitetit të përdoruesit, cakton jetëgjatësinë e një sesioni PHP dhe kontrollohet nga serveri. Kontrolli i jetëgjatësisë së sesionit funksionon si më poshtë (këtu konsiderojmë një shembull të ruajtjes së sesioneve në skedarë të përkohshëm si opsioni më i zakonshëm dhe i paracaktuar në PHP).

Kur krijohet një sesion i ri, një skedar i quajtur sess_ krijohet në drejtorinë e vendosur si drejtoria e ruajtjes së sesioneve në parametrin e cilësimeve PHP session.save_path , Ku - identifikuesi i sesionit. Më pas, në çdo kërkesë, në momentin e nisjes së një sesioni tashmë ekzistues, PHP përditëson kohën e modifikimit të këtij skedari. Kështu, në çdo tjetër Kërkesa PHP, nga diferenca midis kohës aktuale dhe kohës së fundit të modifikimit të skedarit të sesionit, mund të përcaktojë nëse sesioni është aktiv ose kohëzgjatja e tij ka skaduar tashmë. (Mekanizmi për fshirjen e skedarëve të vjetër të sesionit diskutohet më në detaje në seksionin vijues.)

Shënim: Duhet të theksohet këtu se parametri session.gc_maxlifetime zbatohet për të gjitha sesionet brenda një serveri (më saktë, brenda një procesi kryesor PHP). Në praktikë, kjo do të thotë që nëse disa sajte po funksionojnë në server dhe secila prej tyre ka afatin e vet të mosaktivitetit të përdoruesit, atëherë vendosja e këtij parametri në një nga faqet do të çojë në vendosjen e tij për faqet e tjera. E njëjta gjë vlen edhe për pritjen e përbashkët. Për të shmangur këtë situatë, drejtoritë e veçanta të sesioneve përdoren për çdo sajt brenda të njëjtit server. Vendosja e shtegut për në direktorinë e sesioneve bëhet duke përdorur parametrin session.save_path në skedarin e cilësimeve php.ini, ose duke thirrur funksionin ini_set(). Pas kësaj, sesionet e çdo sajti do të ruhen në drejtori të veçanta dhe parametri session.gc_maxlifetime i vendosur në një nga sajtet do të jetë i vlefshëm vetëm për sesionin e tij. Ne nuk do ta shqyrtojmë këtë rast në detaje, veçanërisht pasi kemi një opsion më fleksibël për monitorimin e pasivitetit të përdoruesit.

Kontrollimi i pasivitetit të përdoruesit duke përdorur variablat e sesionit

Duket se opsioni i mëparshëm, me gjithë thjeshtësinë e tij (vetëm disa rreshta shtesë kodi), jep gjithçka që na nevojitet. Por, çka nëse jo çdo kërkesë mund të konsiderohet si rezultat i aktivitetit të përdoruesit? Për shembull, një faqe ka një kohëmatës që bën periodikisht një kërkesë AJAX për të marrë përditësime nga serveri. Një kërkesë e tillë nuk mund të konsiderohet si aktivitet i përdoruesit, që do të thotë se zgjatja automatike e jetëgjatësisë së sesionit nuk është e saktë në këtë rast. Por ne e dimë se PHP përditëson automatikisht kohën e modifikimit të skedarit të sesionit sa herë që thirret funksioni session_start(), që do të thotë se çdo kërkesë do të çojë në një zgjatje të jetëgjatësisë së sesionit dhe koha e mosaktivitetit të përdoruesit nuk do të ndodhë kurrë. Për më tepër, shënimi i fundit nga seksioni i mëparshëm në lidhje me ndërlikimet e parametrit sesion.gc_maxlifetime mund të duket shumë konfuz dhe i vështirë për t'u zbatuar për disa.

Për të zgjidhur këtë problem, ne do të braktisim përdorimin e mekanizmave të integruar PHP dhe do të prezantojmë disa variabla të reja të sesionit që do të na lejojnë të kontrollojmë vetë kohën e pasivitetit të përdoruesit.

Funksioni startSession($isUserActivity=true) ($sessionLifetime = 300; nëse (session_id()) kthehet true; // Cakto jetëgjatësinë e cookie-t përpara mbylljes së shfletuesit (ne do të kontrollojmë gjithçka në anën e serverit) ini_set("sesion. cookie_lifetime", 0) ; nëse (! session_start()) kthen false; $t = time(); nëse ($sessionLifetime) ( // Nëse koha e paaktivitetit të përdoruesit është caktuar, // kontrolloni kohën e kaluar që nga aktiviteti i fundit i përdoruesit // (koha e kërkesës së fundit) kur u përditësua ndryshorja e sesionit të aktivitetit të fundit) nëse (isset($_SESSION["lastactivity"]) && $t-$_SESSION["lastactivity"] >= $sessionLifetime) ( // Nëse koha e kaluar që nga aktiviteti i fundit i përdoruesit, // është më i madh se koha e pasivitetit, që do të thotë se sesioni ka skaduar dhe sesioni duhet të ndërpritet shkatërrojëSession( else ( // Nëse skadimi nuk ka ndodhur ende, // dhe nëse Kërkesa erdhi si rezultat i aktivitetit të përdoruesit, // përditësoni variablin e fundit të aktivitetit me vlerën e kohës aktuale, // duke e zgjatur kohën e seancës me një seancë tjetër Lifetime nëse ($isUserActivity) $_SESSION["lastactivity"] =; $t; ) ) kthimi i vërtetë; )

Le të përmbledhim. Në çdo kërkesë kontrollojmë nëse është arritur afati që nga aktiviteti i fundit i përdoruesit deri në momentin aktual dhe nëse është arritur, shkatërrojmë seancën dhe ndërpresim ekzekutimin e funksionit, duke e kthyer FALSE. Nëse koha nuk është arritur dhe parametri $isUserActivity me vlerën TRUE i kalohet funksionit, ne përditësojmë kohën e aktivitetit të fundit të përdoruesit. Gjithçka që duhet të bëjmë është të përcaktojmë në skriptin e thirrjes nëse kërkesa është rezultat i aktivitetit të përdoruesit dhe nëse jo, thirrni funksionin startSession me parametrin $isUserActivity të vendosur në FALSE.

Përditësim nga 07-06-2013
Përpunimi i rezultatit të funksionit sesionStart().

Komentet theksuan se kthimi FALSE nuk ofron një kuptim të plotë të shkakut të gabimit, dhe kjo është absolutisht e drejtë. Unë nuk publikova trajtimin e detajuar të gabimeve këtu (gjatësia e artikullit tashmë është mjaft e madhe), pasi kjo nuk lidhet drejtpërdrejt me temën e artikullit. Por duke pasur parasysh komentet, unë do të sqaroj.

Siç mund ta shihni, funksioni sesionStart mund të kthejë FALSE në dy raste. Ose sesioni nuk mund të fillonte për shkak të disa gabimeve të brendshme të serverit (për shembull, cilësimet e pasakta të sesionit në php.ini), ose kohëzgjatja e sesionit ka skaduar. Në rastin e parë, duhet ta ridrejtojmë përdoruesin në një faqe me një gabim që thotë se ka probleme në server dhe një formular për të kontaktuar mbështetjen. Në rastin e dytë, ne duhet ta transferojmë përdoruesin në formularin e hyrjes dhe të shfaqim një mesazh përkatës në të që thotë se sesioni ka skaduar. Për ta bërë këtë, ne duhet të fusim kodet e gabimit dhe të kthejmë kodin përkatës në vend të FALSE, dhe në metodën e thirrjes, ta kontrollojmë dhe të veprojmë në përputhje me rrethanat.

Tani, edhe nëse një sesion në server ekziston ende, ai do të shkatërrohet herën e parë kur aksesohet nëse afati i pasivitetit të përdoruesit ka skaduar. Dhe kjo do të ndodhë pavarësisht nga jeta e sesionit të caktuar në cilësimet globale të PHP.

Shënim:Çfarë ndodh nëse shfletuesi mbyllet dhe cookie-ja e emrit të sesionit shkatërrohet automatikisht? Kërkesa për serverin herën tjetër që do të hapet shfletuesi nuk do të përmbajë kukit e sesionit dhe serveri nuk do të jetë në gjendje të hapë seancën dhe të kontrollojë kohën e paaktivitetit të përdoruesit. Për ne, kjo është e barabartë me krijimin e një sesioni të ri dhe nuk ndikon në asnjë mënyrë funksionalitetin ose sigurinë. Por lind një pyetje e drejtë - kush do ta shkatërrojë më pas seancën e vjetër, nëse deri më tani e kemi shkatërruar pas skadimit të afatit? Apo do të mbetet përgjithmonë në drejtorinë e sesioneve? Për të pastruar seancat e vjetra në PHP, ekziston një mekanizëm i quajtur mbledhja e mbeturinave. Ai funksionon në momentin e kërkesës së radhës në server dhe pastron të gjitha seancat e vjetra bazuar në datën e fundit të modifikimit të skedarëve të sesionit. Por mekanizmi i mbledhjes së mbeturinave nuk fillon me çdo kërkesë drejtuar serverit. Frekuenca (ose më mirë, probabiliteti) i nisjes përcaktohet nga dy parametrat e cilësimeve session.gc_probability dhe session.gc_divisor. Rezultati i ndarjes së parametrit të parë me të dytin është probabiliteti i nisjes së mekanizmit të grumbullimit të mbeturinave. Kështu, në mënyrë që mekanizmi i pastrimit të sesionit të hapet me çdo kërkesë në server, këto parametra duhet të vendosen në vlera të barabarta, për shembull "1". Kjo qasje garanton një drejtori të pastër të sesioneve, por padyshim është shumë e shtrenjtë për serverin. Prandaj, në sistemet e prodhimit, vlera e paracaktuar e session.gc_divisor është vendosur në 1000, që do të thotë se mekanizmi i grumbullimit të mbeturinave do të funksionojë me një probabilitet prej 1/1000. Nëse eksperimentoni me këto cilësime në skedarin tuaj php.ini, mund të vini re se në rastin e përshkruar më sipër, kur shfletuesi mbyllet dhe pastron të gjitha kukit e tij, ka ende seanca të vjetra të mbetura në drejtorinë e sesioneve për pak kohë. Por kjo nuk duhet t'ju shqetësojë, sepse... siç u tha tashmë, kjo nuk ndikon në asnjë mënyrë në sigurinë e mekanizmit tonë.

Përditësim nga 07-06-2013

Parandalimi i ngrirjes së skripteve për shkak të bllokimit të skedarit të sesionit

Komentet ngritën çështjen e ngrirjes së ekzekutimit të njëkohshëm të skripteve për shkak të bllokimit të skedarit të sesionit (opsioni më i mrekullueshëm është sondazhi i gjatë).

Për të filluar, vërej se ky problem nuk varet drejtpërdrejt nga ngarkesa e serverit ose numri i përdoruesve. Sigurisht se më shumë kërkesa, aq më ngadalë ekzekutohen skriptet. Por kjo është një varësi indirekte. Problemi shfaqet vetëm brenda një sesioni, kur serveri merr disa kërkesa në emër të një përdoruesi (për shembull, njëra prej tyre është sondazh i gjatë, dhe pjesa tjetër janë kërkesa të rregullta). Çdo kërkesë përpiqet të hyjë në të njëjtin skedar sesioni, dhe nëse kërkesa e mëparshme nuk e zhbllokoi skedarin, atëherë kërkesa e mëpasshme do të mbetet në pritje.

Për të mbajtur në minimum bllokimin e skedarit të sesionit, rekomandohet fuqimisht mbyllja e sesionit duke thirrur funksionin session_write_close() menjëherë pasi të kenë përfunduar të gjitha veprimet me variablat e sesionit. Në praktikë, kjo do të thotë që ju nuk duhet të ruani gjithçka në variablat e sesionit dhe t'i aksesoni ato gjatë gjithë ekzekutimit të skriptit. Dhe nëse keni nevojë të ruani disa të dhëna pune në variablat e sesionit, atëherë lexoni ato menjëherë kur të fillojë sesioni, ruajini ato në variabla lokale për përdorim të mëvonshëm dhe mbyllni seancën (që do të thotë mbyllja e seancës duke përdorur funksionin session_write_close dhe jo shkatërrimi duke përdorur session_destroy ).

Në shembullin tonë, kjo do të thotë që menjëherë pas hapjes së një sesioni, duke kontrolluar jetëgjatësinë e tij dhe ekzistencën e një përdoruesi të autorizuar, ne duhet të lexojmë dhe ruajmë të gjitha shtesë kërkohet nga aplikacioni variablat e sesionit (nëse ekzistojnë), më pas mbyllni seancën duke përdorur një thirrje për session_write_close() dhe vazhdoni të ekzekutoni skriptin, qoftë një sondazh i gjatë apo një kërkesë e rregullt.

Mbrojtja e seancave nga përdorimi i paautorizuar

Le të imagjinojmë situatën. Një nga përdoruesit tuaj merr një trojan që grabit cookie-t e shfletuesit (në të cilin ruhet sesioni ynë) dhe e dërgon atë në emailin e specifikuar. Sulmuesi merr cookie-n dhe e përdor atë për të mashtruar një kërkesë në emër të përdoruesit tonë të autorizuar. Serveri e pranon me sukses dhe e përpunon këtë kërkesë sikur të ishte nga një përdorues i autorizuar. Nëse verifikimi shtesë i adresës IP nuk zbatohet, një sulm i tillë do të çojë në një hakim të suksesshëm të llogarisë së përdoruesit me të gjitha pasojat që pasojnë.

Pse ishte e mundur kjo? Natyrisht, sepse emri dhe identifikuesi i sesionit janë gjithmonë të njëjtë për të gjithë jetëgjatësinë e sesionit, dhe nëse i merrni këto të dhëna, mund të dërgoni lehtësisht kërkesa në emër të një përdoruesi tjetër (sigurisht, brenda jetëgjatësisë së këtij sesioni). Ky mund të mos jetë lloji më i zakonshëm i sulmit, por teorikisht duket mjaft i realizueshëm, veçanërisht duke marrë parasysh që një trojan i tillë nuk ka nevojë as për të drejtat e administratorit për të grabitur cookie-t e shfletuesit të përdoruesit.

Si mund të mbroheni nga sulmet e këtij lloji? Përsëri, padyshim, duke kufizuar jetëgjatësinë e identifikuesit të sesionit dhe duke ndryshuar periodikisht identifikuesin brenda të njëjtit sesion. Ne gjithashtu mund të ndryshojmë emrin e sesionit duke fshirë plotësisht të vjetrën dhe duke krijuar një sesion të ri, duke kopjuar të gjitha variablat e sesionit nga ai i vjetër në të. Por kjo nuk ndikon në thelbin e qasjes, kështu që për thjeshtësi do të kufizohemi vetëm në identifikuesin e sesionit.

Është e qartë se sa më e shkurtër jetëgjatësia e ID-së së sesionit, aq më pak kohë do të ketë një sulmues për të marrë dhe përdorur cookie për të falsifikuar një kërkesë përdoruesi. Idealisht, një identifikues i ri duhet të përdoret për çdo kërkesë, i cili do të minimizojë mundësinë e përdorimit të seancës së dikujt tjetër. Por ne do të shqyrtojmë rastin e përgjithshëm kur koha e rigjenerimit të identifikuesit të sesionit caktohet në mënyrë arbitrare.

(Ne do të heqim pjesën e kodit që tashmë është diskutuar).

Funksioni startSession($isUserActivity=true) (// Jetëgjatësia e identifikuesit të sesionit $idLifetime = 60; ... nëse ($idLifetime) ( // Nëse jetëgjatësia e identifikuesit të sesionit është caktuar, // kontrolloni kohën e kaluar që kur seanca ishte krijuar ose rigjenerimi i fundit // (koha e kërkesës së fundit kur u përditësua variabli i sesionit koha e fillimit) if (isset($_SESSION["starttime"])) ( if ($t-$_SESSION["starttime"] >= $ idLifetime) ( // Jeta e identifikuesit të seancës kohore ka skaduar // Gjeneroni një identifikues të ri session_regenerate_id(true); $_SESSION["starttime"] = $t) ) tjetër ( // Ne arrijmë këtu nëse seanca sapo është krijuar // Cakto kohën e gjenerimit të identifikuesit të sesionit në koha aktuale$_SESSION["fillimi"] = $t; ) ) kthimi i vërtetë; )

Pra, kur krijojmë një sesion të ri (që ndodh kur përdoruesi regjistrohet me sukses), vendosim variablin e seancës starttime, e cila ruan për ne kohën e gjeneratës së fundit të identifikuesit të sesionit, në një vlerë të barabartë me kohën aktuale të serverit. Më pas, në çdo kërkesë, ne kontrollojmë nëse ka kaluar mjaft kohë (idLifetime) nga gjenerimi i fundit i identifikuesit dhe nëse po, ne gjenerojmë një të ri. Kështu, nëse gjatë jetës së caktuar të identifikuesit sulmuesi që ka marrë cookie-n e përdoruesit të autorizuar nuk ka kohë për ta përdorur atë, kërkesa e rreme do të konsiderohet nga serveri si e paautorizuar dhe sulmuesi do të dërgohet në faqen e hyrjes. .

Shënim: ID-ja e re e sesionit futet në cookie-n e shfletuesit kur thirret funksioni session_regenerate_id(), i cili dërgon cookie-n e ri, të ngjashëm me funksionin session_start(), kështu që ne nuk kemi nevojë ta përditësojmë vetë cookie-n.

Nëse duam t'i bëjmë seancat tona sa më të sigurta, mjafton të vendosim jetëgjatësinë e identifikuesit në një ose madje të heqim funksionin session_regenerate_id() nga kllapat dhe të heqim të gjitha kontrollet, të cilat do të çojnë në rigjenerimin e identifikuesit në secilën prej tyre. kërkesë. (Unë nuk e kam testuar ndikimin e kësaj qasjeje në performancën dhe mund të them vetëm se funksioni session_regenerate_id(true) në thelb kryen vetëm 4 veprime: gjenerimi i një identifikuesi të ri, krijimi i një titulli me skedarin e sesionit, fshirja e të vjetrit dhe krijimi një skedar të ri sesioni).

Digresioni lirik: Nëse trojani rezulton të jetë aq i zgjuar sa nuk do t'i dërgojë cookie sulmuesit, por organizon dërgimin e një kërkese të rreme të parapërgatitur menjëherë pas marrjes së cookie-t, metoda e përshkruar më sipër ka shumë të ngjarë të mos jetë në gjendje të mbrojë kundër të tilla. një sulm, sepse ndërmjet kohës që Trojani merr cookie-n dhe dërgimit të kërkesës së rreme nuk do të ketë praktikisht asnjë ndryshim dhe ka një probabilitet të lartë që në këtë moment identifikuesi i sesionit të mos rigjenerohet.

Mundësia e punës së njëkohshme në një shfletues në emër të disa përdoruesve

Detyra e fundit që do të doja të merrja në konsideratë është aftësia për disa përdorues që të punojnë njëkohësisht në një shfletues. Kjo veçori është veçanërisht e dobishme në fazën e testimit, kur duhet të imitoni punën e njëkohshme të përdoruesve, dhe këshillohet ta bëni këtë në shfletuesin tuaj të preferuar, në vend që të përdorni të gjithë arsenalin e disponueshëm ose të hapni disa raste të shfletuesit në modalitetin e fshehtë. .

Në shembujt tanë të mëparshëm, ne nuk specifikuam në mënyrë eksplicite një emër sesioni, kështu që u përdor emri i paracaktuar PHP (PHPSESSID). Kjo do të thotë që të gjitha seancat që kemi krijuar deri tani kanë dërguar një cookie në shfletuesin me emrin PHPSESSID. Natyrisht, nëse emri i cookie-t është gjithmonë i njëjtë, atëherë nuk ka asnjë mënyrë për të organizuar dy sesione me të njëjtin emër brenda të njëjtit shfletues. Por nëse do të përdornim emrin tonë të sesionit për secilin përdorues, problemi do të zgjidhej. Le të bëjmë kështu.

Funksioni startSession($isUserActivity=true, $prefix=null) ( ... nëse (session_id()) kthehet true; // Nëse prefiksi i përdoruesit kalohet në parametrat, // vendosni një emër unik të sesionit që përfshin këtë prefiks, // përndryshe vendos një emër të përbashkët për të gjithë përdoruesit (për shembull, MYPROJECT) emri i sesionit ("MYPROJECT". nëse (! session_start()) kthen false ... )

Tani gjithçka që mbetet është të sigurohemi që skripti thirrës të kalojë një prefiks unik për secilin përdorues në funksionin startSession(). Kjo mund të bëhet, për shembull, duke kaluar një prefiks në parametrat GET/POST të çdo kërkese ose përmes një cookie shtesë.

konkluzioni

Si përfundim, unë do të jap kodin përfundimtar të plotë të funksioneve tona për të punuar me sesionet PHP, duke përfshirë të gjitha detyrat e diskutuara më sipër.

Funksioni startSession($isUserActivity=true, $prefiks=null) ( $sessionLifetime = 300; $idLifetime = 60; nëse (session_id()) kthehet i vërtetë; emri i sesionit ("MYPROJECT".($prefiksi ? "_".$prefiksi: "")); $t-$_SESSION["lastactivity"] >= $sessionLifetime) (structSession(); kthe false; ) tjetër (nëse ($isUserActivity) $_SESSION["lastactivity"] = $t; ) ) nëse ($idLifetime ) ( if (isset($_SESSION["starttime"])) ( if ($t-$_SESSION["starttime"] >= $idLifetime) ( session_regenerate_id(true); $_SESSION["starttime"] = $t; ) ) else ( $_SESSION["starttime"] = $t; ) ) kthen true funksionin DestructSession() ( if (session_id()) ( session_unset(); setcookie(sesion_em(), session_id(), time() -60*; 60*24 sesion_shkatërrim();

Shpresoj se ky artikull do të kursejë pak kohë për ata që nuk kanë hyrë kurrë shumë thellë në mekanizmin e sesionit dhe do të japë njohuri të mjaftueshme për këtë mekanizëm për ata që sapo kanë filluar të njihen me PHP.

7,7 mijë

Duke përdorur seancat PHP serveri ju identifikon dhe ju lejon të kryeni veprimet e nevojshme: ndryshimin e informacionit në faqe të ndryshme web, shtimin e informacionit të ri, etj. Pas përfundimit të punës në sit, ju fshini seancën aktuale duke klikuar në butonin "Dalje":

Çfarë është një sesion PHP?

Një sesion PHP është një mënyrë për të ruajtur informacionin në variablat e sesionit që mund të përdoret për vërtetim në shumë faqe ueb. Ndryshe nga cookies, informacioni i sesionit nuk ruhet në kompjuterin e përdoruesit. Në vend të kësaj, sesioni krijon një skedar në server në një direktori të përkohshme.

Ky informacion, i ruajtur gjatë gjithë sesionit, është i disponueshëm për të gjitha faqet e internetit të burimit. Në server, vendndodhja e skedarit të përkohshëm përcaktohet nga parametri session.save_path në skedarin e konfigurimit php.ini.

Kur krijoni një sesion PHP, kryhen tre hapat e mëposhtëm:

  • Kur krijohet një sesion, PHP gjeneron një identifikues unik, i cili është një varg i rastësishëm prej 32 numra heksadecimalë. ID-ja e jetës së sesionit PHP duket diçka si kjo: 9c8foj87c3jj973actop1re472e8774;
  • Serveri dërgon një cookie të quajtur PHPSESSID në kompjuterin e përdoruesit për të ruajtur një varg unik identifikues sesioni;
  • Serveri gjeneron një skedar në drejtorinë e përkohshme të specifikuar që përmban emrin e identifikuesit unik të sesionit me prefiksin sesion_g. sess_9c8foj87c3jj973actop1re472e8774.

Këto cilësime ndihmojnë skriptin PHP të marrë vlerat e variablave të sesionit nga skedari. Në anën e klientit, PHPSESSID përmban identifikuesin e sesionit. Ai konfirmon emrin e skedarit që do të kërkohet në një direktori të caktuar në anën e serverit, nga i cili variablat e sesionit mund të nxirren dhe përdoren për verifikim.

Përdoruesi mund ta përfundojë seancën duke klikuar butonin e daljes, i cili thërret funksionin session_destroy(). Kur përdoruesi mbyll shfletuesin, sesioni PHP mbyllet automatikisht. Përndryshe, serveri do të përfundojë seancën pas periudhës së caktuar kohore.

Sintaksa e sesionit në PHP

Kur PHP autorizon përmes një sesioni, ai krijohet duke përdorur funksionin session_start() dhe fshihet duke përdorur funksionin session_destroy(). Globale Ndryshore PHP, i njohur si $_SESSION, përdoret për të vendosur vlerat e variablave të sesionit. Ju mund të rivendosni të gjitha vlerat e vendosura për variablat e sesionit duke përdorur funksionin session_unset().

Operacionet e sesionit

Ne do të shikojmë operacionet e mëposhtme duke përdorur një sesion PHP, si dhe shembuj të tyre.

  • Fillimi i një sesioni PHP dhe vendosja e variablave të sesionit të tij: fillon një sesion i ri PHP duke përdorur funksionin session_start(). Pasi të jetë krijuar një sesion, variablat e sesionit të tij mund të vendosen duke përdorur _SESSION $. Ne kemi vendosur vlerat për variablat " ID e përdoruesit” — “php_user"Dhe" fjalëkalimin” — “tutoriale”:

Sesionet PHP - krijimi Një sesion PHP është nisur dhe variablat e sesionit janë vendosur!"; ?>

Rezultati: Ekzekutimi i kodit PHP të mësipërm në server do të prodhojë mesazhin e mëposhtëm:

  • Marrja e vlerave të ndryshores së sesionit PHP: Është e mundur të merren vlerat e variablave që kemi vendosur gjatë sesionit të fundit të hyrjes në PHP. Kur hapim një sesion PHP në fillim të çdo faqeje ( sesioni_fillimi ()), kodi më poshtë duhet të specifikohet. Ne i marrim dhe shfaqim këto vlera duke përdorur ndryshoren globale $_SESSION:

Sesioni PHP - marrja e vlerave
"; echo "Fjalëkalimi - " . $_SESSION["password"] . "."; ?>

Rezultati: Kur ekzekutojmë kodin e mësipërm PHP në server, do të marrim mesazhin e mëposhtëm si rezultat. Shfaqen vlerat e variablave të sesionit që kemi vendosur më herët pas krijimit të seancës PHP.

  • Përditësimi i vlerave të variablave të sesionit PHP: Gjatë një sesioni, mund të përditësoni vlerat e variablave të tij. Së pari duhet të hapim një sesion PHP në fillim të çdo faqeje ( sesioni_fillimi ()). Në kodin më poshtë, ne përditësojmë vlerat e variablave " ID e përdoruesit” — “new_php_user"Dhe" fjalëkalimin” — “arsimimi”.

Ju mund të printoni një grup variablash të sesionit dhe vlerat e tyre duke përdorur funksionin print_r($ _SESSION), siç tregohet më poshtë:

Sesioni PHP - ndryshimi i vlerave
"; print_r($_SESSION); ?>

Rezultati: Kur të ekzekutojmë kodin e mësipërm PHP në server, do të marrim mesazhin e mëposhtëm. Ai do të përmbajë një sërë variablash sesionesh me vlerat e tyre të reja.

Keni nevojë për një emër përdoruesi dhe fjalëkalim?

Për të dërguar artikuj në internet dhe për të kontrolluar statusin e artikujve të dorëzuar, duhet të regjistroheni dhe të identifikoheni në llogarinë tuaj.

Lista kontrolluese për përgatitjen e një artikulli për paraqitje

Si pjesë e procesit të paraqitjes së artikujve, autorët duhet të kontrollojnë nëse artikulli i tyre plotëson të gjitha pikat e mëposhtme, mund t'u kthehen autorëve nëse ata nuk i plotësojnë këto kërkesa.

    Artikulli është përgatitur në përputhje me kërkesat

Kushtet e transferimit të së drejtës së autorit

Autorët ruajnë të drejtën e autorit të veprës dhe i japin revistës të drejtat e botimit të parë së bashku me veprën, ndërsa e licencojnë atë sipas kushteve të Creative Commons Attribution License, e cila u lejon të tjerëve të rishpërndajnë kjo pune me shënim të detyrueshëm të autorësisë së kësaj vepre dhe një lidhje me botimin origjinal në këtë revistë.

Deklarata e Privatësisë

Emrat dhe adresat Email, e futur në faqen e internetit të kësaj reviste do të përdoret vetëm për qëllimet e përcaktuara nga kjo revistë dhe nuk do të përdoret për asnjë qëllim tjetër ose nuk do t'u jepet personave apo organizatave të tjera.

Përpara regjistrimit në sistem, përdoruesi pajtohet me politikën për përpunimin dhe ruajtjen e të dhënave personale.

Pagesat e autorit

1500 karaktere me hapësira: 300.00 (RUB)

Botimi i 1 faqe të dorëshkrimit (1500 karaktere) - 300 rubla. Materialet / tabelat grafike paguhen veçmas - 50 rubla / 1 copë. Kopja e autorit, përfshirë transportin brenda Rusisë, paguhet me kërkesë të autorit - 400 rubla. Transporti jashtë vendit - 800 rubla. Kostoja e dërgimit të një certifikate të pranimit të materialit për botim është 150 rubla.

Përkthimi i informacionit shoqërues (emri i plotë, vendi i punës së autorëve; titulli; abstrakt; fjalë kyçe) në gjuhe angleze 0,5 rubla për çdo karakter, duke përfshirë hapësirat.

Kujdes! Autorët (kandidatët dhe doktorët e shkencave) të cilët, sipas elibrary.ru, kanë 300 ose më shumë citate (pjesa e vetë-citimeve nuk duhet të jetë më shumë se 30%) publikohen pa pagesë. Nëse keni të drejtë për publikim falas, kur dërgoni materialin, në fushën e komenteve, tregoni një lidhje me profilin tuaj të bibliotekës me numrin e citimeve. Kostot e transportit për grumbullimin paguhen veçmas.

Sesionet në PHP janë një mekanizëm për ruajtjen e informacionit në lidhje me kompjuterin e klientit në anën e serverit. Në fakt, seancat në PHP nuk janë një temë kaq komplekse, por për ta kuptuar atë duhet të dini se si funksionojnë cookies në PHP. Pra, nëse nuk e dini se si funksionojnë cookies në PHP, atëherë lexoni fillimisht artikullin përkatës dhe më pas kthehuni këtu.

Fjala sesion është përkthyer nga anglishtja si sesion, kështu që vetë kuptimi i sesioneve në PHP bëhet më i qartë, por programuesit kanë adoptuar termin "sesione" dhe ne do ta përdorim atë në këtë artikull.

Sesionet në PHP janë shumë të ngjashme me mekanizmin e cookie-ve, të njëjtat çifte të vlerave të çelësit =>, vetëm ato ruhen në anën e serverit.

funksioni session_start().

Ne duhet të fillojmë seancën, për këtë ekziston funksioni session_start(). Ky funksion fillon një sesion, ose sesion, sido që dëshironi ta quani.

Këshillohet që të thërrisni funksionin session_start() në fillim të faqes, por në shembujt e mi nuk e bëj këtë.

grup $_SESSION

Sesionet janë grupe variablash që ruhen në server, por i referohen një vizitori unik. Përsëri, kjo është pika kryesore: seancat ruhen në server.

Për të siguruar ndërveprimin e çdo vizitori me të dhënat e tij nga sesioni i tij, ne përdorim biskotë, komanda për të krijuar të cilën PHP e jep vetë, nuk keni nevojë të shqetësoheni për të. Kjo cookie është e rëndësishme vetëm për serverin dhe nuk mund të përdoret për të marrë të dhënat e përdoruesit.

Në server, të dhënat e sesionit ruhen në një skedar teksti dhe janë të disponueshme në programin PHP në grupin $_SESSION. Për të ruajtur një ndryshore në një seancë, duhet t'i caktoni një vlerë në këtë grup.

Më në fund le të fillojmë të përdorim shembuj. Gjithçka është shumë e thjeshtë.

Sesionet në PHP kuptimi."; ?>

Tani le të përpiqemi të marrim vlerën nga grupi $_SESSION në një shembull tjetër.

Sesionet në PHP

Ju lutemi vini re se nëse në shembullin e dytë heqim funksionin session_start(), atëherë nuk do të kemi akses në të dhënat në grupin $_SESSION.

funksioni session_id().

Pasi të krijohet një sesion, ju automatikisht keni akses në identifikuesin unik të sesionit duke përdorur funksionin session_id(). Ky funksion ju lejon të vendosni dhe të merrni vlerën e ID-së së sesionit.

Sesionet në PHP

Mund të shikoni në shiritin e veglave të zhvilluesit të shfletuesit tuaj (në Chrome, shtypni Ctrl + Shift + I, më pas Burimet dhe do të gjeni një cookie atje), ky domen ka vendosur një cookie për shfletuesin tuaj me emrin PHPSESSID dhe afërsisht sa vijon vlera: “7g5df9rkd1hhvr33lq1k6c72p7”.

Është me vlerën PHPSESSID që serveri do të përcaktojë shfletuesin tuaj dhe do të punojë me grupin përkatës të variablave që do të jenë në dispozicion të skriptit përmes grupit $_SESSION, siç është shkruar më parë.

funksioni sesion_name().

Ndërsa funksioni session_id() ju lejon të merrni vlerën e ID-së së sesionit, funksioni session_em() ju lejon të merrni emrin e sesionit.

Sesionet në PHP

Edhe një herë në lidhje me funksionin session_start().

Tani dimë më shumë se si funksionojnë sesionet në PHP dhe duhet të kthehemi edhe një herë te funksioni session_start(). Ky funksion inicializon mekanizmin e sesionit për përdoruesin aktual. Si ndodh saktësisht kjo:

  • Nëse përdoruesi e hapi faqen për herë të parë, atëherë session_start() vendos një cookie në klient dhe krijon ruajtje të përkohshme në server të lidhur me ID-në e përdoruesit.
  • Përcakton dyqanin e lidhur me ID-në aktuale të kaluar.
  • Nëse ka të dhëna në ruajtje në server, ato vendosen në grupin $_SESSION.
  • Nëse register_globals nga skedari php.ini është On, atëherë të gjithë elementët e grupit $_SESSION kthehen në variabla globale.

Shembull i përdorimit të sesionit

Tani do të shikojmë një shembull që do të na lejojë të kryejmë eksperimente të vogla me seanca.

Sesionet në PHP

Kundër

Ju keni hapur një faqe në sesionin aktualnjë herë.

Hapni shembullin në "> këtë skedë.

E gjithë puna e sesionit bazohet në grupin $_SESSION, kjo është qartë e dukshme në këtë shembull.

Nëse mbyllni dritaren e shfletuesit, seanca do të përfundojë dhe numëruesi ynë do të rivendoset në zero. Kjo sjellje e sesioneve në PHP mund të ndryshohet, ne do t'i kthehemi kësaj çështje pak më vonë në artikull.

Përfundimi i një seance

Për të përfunduar seancën na duhen:

  1. Pastro grupin $_SESSION.
  2. Fshini ruajtjen e përkohshme në server.
  3. Fshi skedarët e sesionit.

Ju mund të pastroni grupin $_SESSION duke përdorur funksionin session_unset().

Funksioni session_destroy() fshin ruajtjen e përkohshme në server. Meqë ra fjala, ajo nuk bën asgjë tjetër.

Ju duhet të fshini një cookie sesioni duke përdorur funksionin setcookie(), të cilin e mësuam në mësimin mbi punën me cookies në PHP.

Shembull i përfundimit të një seance:

Përfundimi i një seance

Seanca ka përfunduar.

Tani mund të kryeni një eksperiment: ekzekutoni një shembull me një numërues në një dritare, rrisni numëruesin dhe më pas ekzekutoni shembullin me fshirjen e seancës dhe rifreskoni faqen me numërues përsëri.

Ju mund të fshini një skedar cookie si ky:

setcookie(emri_sesionit(), "", koha() - 60*60*24*32, "/")

Edhe një herë në lidhje me funksionet session_name() dhe session_id().

Funksionet session_name() dhe session_id() përdoren rrallë në praktikë, por unë po shkruaj për to sepse artikulli duhet të zbulojë vetë mekanizmin se si funksionojnë sesionet në PHP.

Ju mund t'i përdorni këto funksione për të përcaktuar emrat dhe ID-të e sesioneve tuaja, por kjo nuk rekomandohet. Nëse dëshironi t'i vendosni ato, atëherë shkruani këto funksione me argumente përpara funksionit session_start(), si në shembullin më poshtë:

Sesionet në PHP

Duke përdorur këtë shembull, të gjithë përdoruesve do t'u caktohet i njëjti ID i sesionit.

Le të hedhim një vështrim më të afërt këtu: nëse e ekzekutoni shembullin nga seksioni rreth funksionit session_name() (këtu është lidhja) në shfletues të ndryshëm (për shembull, Chrome dhe Internet Explorer), atëherë çdo shfletues do të ketë identifikuesin e tij unik të sesionit . Shfletuesit ruajnë kuki secili në dosjen e tyre, kështu që funksioni session_start() do të lejojë çdo shfletues të krijojë identifikuesin e tij unik dhe, në përputhje me rrethanat, një hapësirë ​​ruajtëse unike do të krijohet për çdo shfletues në server. Prandaj, shembulli kundër (ky) do të funksionojë në mënyrë të pavarur në çdo shfletues.

Nëse vendosni të njëjtën ID të sesionit për të gjithë përdoruesit, atëherë ata do të punojnë me të njëjtën hapësirë ​​ruajtëse në server. Këtu është një shembull i një numëruesi që do të numërojë vizitat nga shfletues të ndryshëm:

100) ( session_unset(); session_destroy(); ) ?> Sesionet në PHP

Sporteli nr.2

Hapi faqen në shfletues të ndryshëmnjë herë.

Hapni shembullin në "> këtë skedë.

Nëse e përdorni këtë shembull, nuk është fakt që do të shihni një të tillë atje. Vizitorë të tjerë mund të kenë ndryshuar tashmë vlerat në dyqanin e sesioneve në server. Nuk e di kur serveri fshin hapësirën ruajtëse në këtë rast, kështu që nëse numëruesi tejkalon 100, unë do ta mbyll seancën.

Vendosja e kohës së pritjes

Si parazgjedhje, seanca "live" derisa vizitori të mbyllë dritaren e shfletuesit. Kjo për faktin se funksioni session_start() vendos një cookie të tillë në klient.

Jetëgjatësia e sesionit mund të ndryshohet duke përdorur funksionin session_set_cookie_params(), këtu është sintaksa e tij.

session_set_cookie_params (jeta int [, shtegu i vargut [, domeni i vargut [, bool i sigurt]]])

Në praktikë, mjafton të përdorni vetëm parametrin e parë (jetën), këtu shkruani kohën në sekonda, e cila përcakton se sa kohë serveri duhet të mbajë mend gjendjen e sesionit pas mbylljes së shfletuesit.

Efekti i funksionit session_set_cookie_params() zbatohet vetëm për periudhën që skripti po ekzekutohet.

Këtu është një shembull i përdorimit të këtij funksioni:

Sesionet në PHP

Sporteli nr. 3

Kundërvlera:.

Hapni numëruesin në "> këtë skedë.

Mbyllni sportelin dhe mbyllni shfletuesin, pas 30 sekondash hapeni përsëri këtë shembull. Sesioni juaj do të ruhet.

Sesionet në PHP ose si të dhëna për një përdorues ose klient që viziton një sajt ruhen kur lëvizni midis faqeve të një sajti pa shumë vështirësi. Mësimi është shumë i rëndësishëm. E rëndësishme për krijimin e 95% të faqeve të internetit.

Çfarë është një seancë në php

Sesionet përdoren për të ruajtur të dhëna të përkohshme (për shembull, që një përdorues ka vizituar një sajt) kur lundroni midis faqeve të të njëjtit sajt. Kur përdorni sesione, të dhënat ruhen në skedarë të përkohshëm në server.
Më shpesh, seancat (dhe cookies, gjithashtu) përdoren kur krijohen dyqane në internet, forume, tabela mesazhesh, rrjete sociale, blogje dhe burime të tjera. Komoditeti i sistemit të sesionit është të ruajë informacione të përkohshme të përdoruesit/klientit të regjistruar, të dhënat për të cilat aksesohen shpejt për një kohë të caktuar. Seanca ka një datë të natyrshme skadimi - derisa shfletuesi të mbyllet. Nëse mbyllni vetëm faqen, atëherë kur hapni faqen, të dhënat për përdoruesin/klientin do të jenë ende të disponueshme.

Logjika e seancës

Sesioni (ose sesioni) është një lloj ruajtjeje të përkohshme të të dhënave. Ju paralajmëroj menjëherë se ia vlen të kurseni një sasi të vogël të dhënash. Për shembull, login dhe fjalëkalimin e përdoruesit vizitues ose numrin e tij serial në bazën e të dhënave.

Shembull pune
1. Përdoruesi vendos hyrjen dhe fjalëkalimin e tij dhe hyn në faqe
2. Të dhënat me hyrje dhe fjalëkalim ruhen në një sesion të njërës prej faqeve të faqes:

Skedari indeks.php

Fillimi_sesionit(); // çdo skedar në të cilin dëshironi të përdorni të dhënat e sesionit duhet të përmbajë një komandë "start sesion" në fillim të kodit

$login = "admin";
$password = "kalim";
$_SESSION["login"] = $login; // ruaj një variabël që përmban hyrje
$_SESSION["fjalëkalim"] = $fjalëkalim; // ruaj një variabël që përmban fjalëkalimin

3. Kur shkoni në një faqe tjetër të sajtit, këto të dhëna do të jenë gjithashtu të disponueshme:

Skedari shembull.php(ose ndonjë faqe tjetër)

Echo "Identifikimi juaj ".$_SESSION["login"]; // do të shfaqë "Hyrja juaj është admin", megjithëse nuk kemi regjistruar asnjë të dhënë në këtë faqe!
Shihni, është e thjeshtë!

4. Nëse dëshironi të pastroni të dhënat e sesionit, atëherë gjithçka që duhet të bëni është:

Skedari shembull.php

Fillimi_sesionit(); // "fillo seancën" përsëri

Unset($_SESSION["identifikimi"]); // kështu ndryshorja u çregjistrua ose u "shkatërrua"
echo "Identifikimi juaj ".$_SESSION["login"]; // do të shfaqë "Identifikimi juaj". Meqenëse e kemi shkatërruar në rreshtin e fundit, nuk ka të dhëna

Session_shkatërrim(); // shkatërroni seancën. Të gjitha të dhënat, duke përfshirë $_SESSION["password"] nuk janë më aty. Kur i kërkoni ato, do të shfaqet një gabim
Në përgjithësi, një transferim i tillë është i ngjashëm me metodën POST, por nuk keni më nevojë të shkruani shumë kode të panevojshme, dhe të gjitha të dhënat e transferuara nga faqja në faqe ruhen në skedarë të përkohshëm në server. E përsëris, seancat duhet të përmbajnë sasi të vogla të dhënash, kështu që ato janë të përshtatshme për ruajtjen e hyrjes/fjalëkalimit, karrocat e blerjeve dhe vëllime të tjera të vogla.

Kalimi i një vlere ose grupi duke përdorur një sesion PHP

Ju mund të shkruani jo vetëm një varg, por edhe një grup të dhënash në një sesion. Thjesht mos e teproni me volumin e grupit, pasi e gjithë kjo do të ndikojë në shpejtësinë dhe hapësirën e zënë në server.

Ne përsëri përdorim një faqe fillestare të caktuar indeks.php

Fillimi_sesionit();

$r = grup ("një", "dy", "tre");

$_SESSION["arr"] = $r;

Në faqen ku do të shfaqet gjithçka
Ne i ruajmë të dhënat në seancë dhe ndjekim lidhjen në një faqe tjetër, ku do të shfaqim të gjitha të dhënat.

Skedari i destinacionit, faqe test.php ku hapim grupin

Fillimi_sesionit();
print_r($_SESSION["arr"]);
// do të printojë
/*
Array
=> një
=> dy
=> tre
*/
?>
Ju mund të dëshironi të rifilloni mësimin në . Në përgjithësi, gjithçka duhet të jetë e qartë.

Funksione të tjera për të punuar me sesione

sesioni_çregjistror(varg)- sesioni harron vlerën e ndryshores globale të specifikuar;
sesioni_shkatërrimi ()- sesioni është shkatërruar (për shembull, nëse përdoruesi u largua nga sistemi duke klikuar butonin e daljes);
sesioni_set_cookie_params (jeta int [, shtegu i vargut [, domeni i vargut]])- duke përdorur këtë funksion mund të caktoni se sa do të zgjasë një sesion duke vendosur një unix_timestamp që përcakton kohën e vdekjes së seancës.

Lista e funksioneve për të punuar me sesione në php
session_cache_expire - kthen skadimin e cache-it aktual
session_cache_limiter - Merr dhe/ose vendos kufizuesin aktual të cache-it
session_commit është një pseudonim për session_write_close()
session_decode - deshifron të dhënat e sesionit nga një varg
session_destroy - shkatërron të gjitha të dhënat e regjistruara për seancën
session_encode - kodon të dhënat aktuale të sesionit si një varg
session_get_cookie_params - merr parametrat e kukive të sesionit
session_id - merr dhe/ose vendos ID-në e sesionit aktual
session_is_registered - përcakton nëse ndryshorja është e regjistruar në seancë
session_module_name - merr dhe/ose vendos modulin aktual të sesionit
Emri_sesionit - merr dhe/ose vendos emrin e sesionit aktual
session_regenerate_id - modifikon ID-në e sesionit aktual me një të krijuar rishtazi
session_register - regjistron një ose më shumë variabla për sesionin aktual
session_save_path - merr dhe/ose cakton shtegun për të ruajtur sesionin aktual
session_set_cookie_params - vendos parametrat e kukive të sesionit
session_set_save_handler - vendos funksionet e ruajtjes së sesioneve të nivelit të përdoruesit
sesion_fillimi - inicializon të dhënat e sesionit
session_unregister - çregjistron një variabël nga sesioni aktual
session_unset - lëshon të gjitha variablat e sesionit
session_write_close - shkruan të dhënat e sesionit dhe fundin e sesionit

Shembuj të punës së sesionit

Numri i shikimeve të faqeve gjatë një sesioni. Një shembull i qartë i punës. Megjithatë, pas mbylljes së shfletuesit, numërimi mbrapsht do të fillojë përsëri.

Numri i vizitave në një faqe brenda një seance

// Një shembull i thjeshtë i përdorimit të seancave pa Cookies.
emri i sesionit ("test");
sesioni_fillimi ();
$_SESSION["count"] = @$_SESSION["count"] + 1;
?>

Kundër


Ju e keni hapur këtë faqe në sesionin tuaj aktual të shfletuesit
kohë(et).
Mbyllni shfletuesin tuaj për të rivendosur këtë numërues.
Klikoni këtu për të përditësuar faqen!
Me çdo kalim numëruesi do të rritet me 1)

Faleminderit per vemendjen! Fat i mirë në përpjekjet tuaja!