Si të konfiguroni telefonat inteligjentë dhe PC. Portali informativ
  • shtëpi
  • OS
  • Jetëgjatësia e sesionit PHP. Zgjatja e jetëgjatësisë së sesionit në PHP

Jetëgjatësia e sesionit PHP. Zgjatja e jetëgjatësisë së sesionit në PHP

Për të ndryshuar jetëgjatësinë e sesionit, do t'ju duhet të kryeni një sërë hapash:

1) Struktura e PHP është e tillë që për të ndryshuar jetëgjatësinë e sesionit do t'ju duhet të krijoni një drejtori të veçantë për këto sesione. Për shembull, ju dëshironi që i gjithë faqja të ketë të njëjtën jetëgjatësi. Pastaj brenda kësaj faqeje krijoni një direktori për seancat ku do të ruhen.

Puna është se si parazgjedhje Përkthyes PHP përdor të njëjtën direktori për të ruajtur sesionet për të gjitha sajtet. Për shkak të kësaj, nëse një sajt ka një jetëgjatësi më të shkurtër se të tjerat, skripti "mbledhës i mbeturinave" i kësaj faqeje "me jetë të ulët" do të pastrojë jo vetëm skedarët e tij, por edhe të gjithë skedarët e sesioneve, kohën. Përditësimi i fundit të cilat nuk kanë ndryshuar më shumë se kohëzgjatja e sesionit të kësaj faqeje të veçantë. Pra, nëse kemi 3 sajte me jetëgjatësi sesioni përkatësisht 30, 60 dhe 120 minuta, atëherë jetëgjatësia e sesionit për TË GJITHA sajtet do të jetë e barabartë me 30 minuta. Kështu funksionon mbledhësi i plehrave - ai nuk dallon nëse një seancë është nga kjo faqe apo e dikujt tjetër.

Për shembull, ne kemi një faqe interneti të vendosur në /www/mysite.ru.

Le të krijojmë një drejtori sesionesh brenda saj

# cd /www/mysite.ru
# seanca mkdir
# chown www-data:www-data seancat
# chmod 700 seanca


Këtu, në vend të www-data, përdorni emrin e përdoruesit dhe fjalëkalimin nën të cilin funksionon Apache (mund t'i gjeni në konfigurimin e Apache, ose nga dalja e komandës ps).

Drejtoria që kemi krijuar është e shkruajtshme dhe e lexueshme vetëm nga përdoruesi i serverit të uebit, duke parandaluar keqpërdorimin e tij nga jashtë.

2) B Skedarët PHP, përpara sesion_start(), duhet të futni rreshtat e mëposhtëm:

ini_set ("session.gc_maxlifetime", 86400);
ini_set("session.cookie_lifetime", 86400);
ini_set("session.save_path", $_SERVER["DOCUMENT_ROOT"] ."/sessions");


Këtu 86400 është jetëgjatësia e seancës në sekonda.

Pse nëpërmjet PHP dhe jo nëpërmjet "php_value" në .htaccess? Sepse këtu është e përshtatshme për ne që të përdorim variablin $_SERVER["DOCUMENT_ROOT"], pa u lidhur kështu me një drejtori specifike në lidhje me sistemi i skedarëve server.

Rreshti i parë dhe i dytë mund të shkruhen në .htaccess, por nuk e shoh kuptimin në shpërndarjen e tyre në dy skedarë të ndryshëm.

3) Mbledhësi i mbeturinave është një skript që funksionon me njëfarë probabiliteti kur hapet një faqe. Fakti është se nuk fillon me probabilitet 100% për të zvogëluar ngarkesën në server. Parazgjedhja është 1%. Kështu, vetëm në 1% të rasteve, kur hapet një faqe, do të kontrollohet vlefshmëria e seancës (d.m.th. "nëse ka skaduar").

Ju ndoshta jeni kështu frekuencë të ulët i pakënaqur. Pra, le ta ndryshojmë këtë parametër. Parametri i mëposhtëm përcakton gjasat që seancat të kontrollohen kur hapni një faqe:

ini_set("session.gc_probability", "100");

session.gc_probability mund të marrë vlera nga 1 në 100 - përkatësisht, nga 1% në 100%. Nëse e vendosni në 100, mbledhësi i mbeturinave do të funksionojë gjithmonë kur përdoruesit hapin secilën faqe. Kjo do të rrisë ngarkesën në server, por në këtë mënyrë ju garantoni që sesioni nuk do të mbijetojë më shumë se jetëgjatësia që keni specifikuar.

Vendosja e këtij çelësi është një çështje analize dhe llogaritjeje. Nëse ka shumë vizitorë në sit, atëherë vlerat mbi 30% jo vetëm që do të krijojnë një ngarkesë të panevojshme, por gjithashtu nuk do të jenë të dobishme - në fund të fundit, nuk janë hapjet e faqeve të këtij sesioni të veçantë që numërohen, por të gjitha hapjet e faqeve në përgjithësi. Nëse disa njerëz vizitojnë sitin (për shembull, disa faqe të brendshme të kompanisë), atëherë mund të vendosni një probabilitet më të lartë.

Nëse tashmë e dini pak a shumë mirë PHP, atëherë ju e dini cili është ndryshimi midis pastërtisë biskotë dhe seancat. Dhe ju duhet ta dini këtë jetëgjatësia e seancës është e kufizuar. Sidoqoftë, kjo nuk është gjithmonë e përshtatshme. Dhe në këtë artikull do të flas se si zgjat jetën e sesionit në PHP.

Për çfarë është? zgjat jetën e sesionit në PHP? Shumica arsye e zakonshme- kjo është për të zgjatur jetëgjatësinë e autorizimit të përdoruesit, i cili bazohet në sesione. Në mënyrë tipike, si parazgjedhje, sesioni ruhet 15 minuta. Prandaj, përmes 15 minuta pasiviteti, përdoruesi del automatikisht dhe duhet të identifikohet përsëri.

Mundësia më e lehtë për të zgjatur seancën është ndryshimi i skedarit php.ini(ndryshueshme sesioni.gc_maxlifetime), megjithatë, vështirë se keni një mundësi të tillë (përveç nëse, sigurisht, jeni pronari i serverit). Prandaj, më së shumti opsioni më i mirë do të shtohet në skedar .htaccess kjo linjë:

Sesioni Php_value.gc_maxlifetime 3600

Këtu kemi ndryshuar vlerën e ndryshores sesioni.gc_maxlifetime3600 sekonda Tani sesioni ynë do të ruhet saktësisht 1 orë. Nëse vendosni 0 , atëherë seanca do të ruhet për një kohë të pakufizuar, gjë që unë nuk ju rekomandoj ta bëni, përveç ndoshta për server lokal. Meqenëse është i përshtatshëm kur krijoni dhe korrigjoni një faqe interneti.

Por mos harroni se të gjithë skedarët e sesionit ruhen në server. Si rezultat, një numër i tillë i tyre mund të grumbullohet saqë thjesht nuk ka hapësirë ​​të mjaftueshme (natyrisht, subjekt i frekuentimit të lartë). Përveç kësaj, mos harroni: sa më e shkurtër jetëgjatësia e seancës, aq më e lartë është siguria.

Edhe nje gje. Disa ofrues të pritjes nuk ju lejojnë të menaxhoni skedarin .htaccess. Nëse po, atëherë ndryshoni hostin, sepse çdo ofrues pritës që respekton veten ju lejon të ndryshoni .htaccess.

Tani ju e dini se si të hiqni kufizimin në jetëgjatësia e sesionit në PHP dhe shpresoj se faqja juaj do të bëhet shumë më e përshtatshme si për ju ashtu edhe për përdoruesit tuaj.

19.01.17 7.5K

Duke përdorur një sesion PHP, serveri ju identifikon dhe ju lejon të performoni operacionet e nevojshme: Ndryshoni informacionin në ueb faqe të ndryshme, shtoni informacione të reja 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ë drejtori të përkohshme.

Ky informacion, i ruajtur gjatë gjithë sesionit, është i disponueshëm për të gjitha faqet e internetit të burimit. Në vendndodhjen e serverit skedar i përkohshëm përcaktuar nga parametri sesioni.save_path në skedari i 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ë Skripti PHP nxirrni vlerat e ndryshoreve të sesionit nga një skedar. 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 të sesionit me vlerat e tyre të reja.

Periudha e funksionimit të variablave PHP $_SESSION, dhe si rrjedhojë, aktiviteti i aplikacioneve në ueb, varet nga kohëzgjatja e seancës. Për shembull, nëse një përdorues është i kyçur në sistem, koha gjatë së cilës ai mund të jetë joaktiv pa pasur nevojë të rifusë hyrjen dhe fjalëkalimin e tij varet nga ky parametër.

ekzistojnë menyra te ndryshme Vendosja e jetëgjatësisë së seancës. Le të përpiqemi ta kuptojmë me një shembull sistemi operativ Linux.

Si të zbuloni jetëgjatësinë e seancës

Para akordimit, ia vlen të shikoni Gjendja e tanishme. Ka disa mënyra për ta bërë këtë:

1. Në server duke përdorur komandën php

php -i | sesioni grep

Ne marrim një listë të parametrave që lidhen me seancat. Ne jemi të interesuar për:

  • sesioni.jete_cookie => 0 => 0
  • session.gc_maxlifetime => 1440 => 1440

Këto vlera janë vlera e paracaktuar. cookie_lifetime => 0 flet për efektin e biskotave përpara mbylljes shfletuesi, nëse e vendosni këtë parametër në një vlerë specifike, seanca do të ndërpritet kur sesioni është aktiv, kështu që është më mirë ta lini atë në zero.

2. Përdorimi i funksionit php ini_get

$maxlifetime = ini_get("session.gc_maxlifetime");
$cookielifetime = ini_get("session.cookie_lifetime");

Echo $maxlifetime;
echo $cookielifetime;

systemctl rinis apache2 || systemctl rinisni httpd

* V Versionet Linux pa systemd përdorim komandën rinisja e shërbimit apache2 ose rifillimi i shërbimit httpd.

Nëse përdorim FastCGI (PHP-FPM):

Konfigurimi nëpërmjet skedarit .htaccess

Ky skedar i lejon webmasterit të menaxhojë disa cilësime të serverit të uebit. Për ta modifikuar atë, ju duhet qasje në skedarët e faqes. Metoda nuk do të funksionojë nëse mbajtësi PHP nuk është Apache, por, për shembull, NGINX+ PHP-FPM. Megjithëse, ekziston gjithashtu një mënyrë (më shumë për të më poshtë).

Ne shtojmë sa vijon në skedarin .htaccess:

sesioni php_value.gc_maxlifetime 86400
php_value sesion.cookie_lifetime 0

* siç mund ta shihni, parametrat janë të njëjtë si kur konfigurohen përmes php.ini.

Siç u përmend më lart, metoda nuk do të funksionojë nëse nuk përdoret Apache. Megjithatë, konfigurimi mund të bëhet në server (përsëri, ne duhet të kemi aksesin e duhur).

Hapni skedarin e konfigurimit të serverit në internet, për shembull, në php-fpm:

vi /etc/php-fpm.d/www.conf

dhe modifikoni/shtoni:

php_value = 86400
php_value = 0

Pastaj ne rifillojmë shërbimin:

systemctl rinis php-fpm || rinisja e shërbimit php-fpm

Vendosja e një parametri në kodin e aplikacionit

Metoda mund të jetë e dobishme kur faqe të ndryshme portali duhet të ketë kohë të ndryshme sesioni i jetës. Për ta bërë këtë, mund të përdorni funksionet PHP ini_set dhe session_set_cookie_params, për shembull:

Ini_set ("session.gc_maxlifetime", 86400);
ini_set("session.cookie_lifetime", 0);
sesioni_sesioni_cookie_params(0);

Fillimi_sesionit();

Funksionet duhet të thirren përpara hapjes së një sesioni (sesion_start).

Vendosja e një sesioni në aplikacion

Disa aplikacione mund të anashkalojnë cilësimet. Në këtë rast, duhet të vendosni jetëgjatësinë e sesionit në parametrat e programit. Çdo aplikacion ka cilësimet e veta, të cilat duhet t'i kuptoni vetë. Le të marrim një shembull të konfigurimit të një sesioni në Bitrix CMS.

Shkojmë Grupi i përdoruesve- zgjidhni një grup - Siguria. Gjeni parametrin "Jetëgjatësia e sesionit (minuta)" dhe vendosni kohën, për shembull 1440 (24 orë në minuta).

Si të rinovoni automatikisht seancat

Nëse seanca nxirret më periudhë të caktuar dhe përfundon në kohë të caktuar, kjo mund të shkaktojë që sesioni aktiv i përdoruesit të ndërpritet. Është shumë më i përshtatshëm nëse kohëzgjatja e seancës zgjatet automatikisht nëse vizitori rifreskon faqen. Për këtë, ekziston parametri cookie_lifetime, të cilin në të gjithë shembujt e mësipërm e kemi vendosur në 0.

Nëse e vendosim vlerën e jetëgjatësisë së cookie në 86400, atëherë seanca do të ndërpritet pas 24 orësh. Kjo nuk është gjithmonë e përshtatshme.

Nëse ka nevojë për të kontrolluar dhe ndërprerë seancën, mund të përdorni funksionin PHP sesioni_shkatërrimi ().

Rruga e ruajtjes së skedarëve të sesionit

Vendndodhja e ruajtjes për skedarët e sesionit përcaktohet nga parametri sesioni.ruaj_rrugën po ashtu është edhe koha e jetës. Si parazgjedhje, shtegu mund të përdoret /var/lib/php/sessions.

Kjo parametër i rëndësishëm- nëse serveri në internet nuk ka të drejta për të shkruar këtë katalog, kjo do të çojë në pamundësinë për të ruajtur seancat, gjë që do të shkaktojë rezultate të papritura nga aplikacionet.

Artikujt më të mirë mbi këtë temë