Windows.  Vírusy.  Prenosné počítače.  internet.  Kancelária.  Verejné služby.  Vodiči

Doba pôsobenia premenných PHP $_SESSION a v dôsledku toho aj aktivita webových aplikácií závisí od trvania relácie. Napríklad, ak je používateľ prihlásený do systému, od tohto parametra závisí čas, počas ktorého môže byť neaktívny bez toho, aby musel znova zadávať svoje prihlasovacie meno a heslo.

Existujú rôznymi spôsobmi Nastavenie životnosti relácie. Skúsme to zistiť na príklade operačný systém Linux.

Ako zistiť životnosť relácie

Pred nastavením sa oplatí pozrieť sa na aktuálny stav. Existuje niekoľko spôsobov, ako to urobiť:

1. Na serveri pomocou príkazu php

php -i | grep relácia

Získame zoznam parametrov súvisiacich s reláciami. Máme záujem o:

  • session.cookie_lifetime => 0 => 0
  • session.gc_maxlifetime => 1440 => 1440

Tieto hodnoty sú predvolenou hodnotou. cookie_lifetime => 0 informuje o účinku súborov cookie až do zatvorenia prehliadača, ak nastavíte tento parameter konkrétnu hodnotu, relácia sa preruší, keď je aktívna relácia, takže je lepšie ju nechať na nule.

2. Pomocou php funkcie ini_get

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

Echo $ maxlifetime;
echo $cookielifetime;

systemctl reštartujte apache2 || systemctl reštart httpd

*V Linuxové verzie bez systemd použijeme príkaz reštart služby apache2 alebo reštart služby httpd.

Ak používame FastCGI (PHP-FPM):

Konfigurácia cez súbor .htaccess

Tento súbor umožňuje správcovi webu spravovať niektoré nastavenia webového servera. Na jej úpravu potrebujete prístup k súborom lokality. Metóda nebude fungovať, ak PHP handler nie je Apache, ale napríklad NGINX + PHP-FPM. Aj keď existuje aj spôsob (viac o ňom nižšie).

Do súboru .htaccess pridávame nasledovné:

php_value session.gc_maxlifetime 86400
php_value session.cookie_lifetime 0

* ako vidíte, parametre sú rovnaké ako pri konfigurácii cez php.ini.

Ako je uvedené vyššie, metóda nebude fungovať, ak sa nepoužíva Apache. Nastavenie však možno vykonať na serveri (opäť musíme mať príslušný prístup).

Otvorte konfiguračný súbor webového servera, napríklad v php-fpm:

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

a upraviť/pridať:

php_value = 86400
php_value = 0

Potom službu reštartujeme:

systemctl reštart php-fpm || reštart služby php-fpm

Nastavenie parametra v kóde aplikácie

Táto metóda môže byť užitočná, keď by rôzne portálové stránky mali mať rôznu životnosť relácie. Na tento účel môžete použiť funkcie PHP ini_set a session_set_cookie_params, napríklad:

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

Session_start();

Funkcie sa musia volať pred otvorením relácie (session_start).

Nastavenie relácie v aplikácii

Niektoré aplikácie môžu prepísať nastavenia. V tomto prípade musíte v parametroch programu nastaviť životnosť relácie. Každá aplikácia má svoje vlastné nastavenia, na ktoré musíte prísť sami. Vezmime si príklad nastavenia relácie v Bitrix CMS.

Poďme na Skupiny používateľov- vyberte skupinu - Bezpečnosť. Nájdite parameter „Doba trvania relácie (minúty)“ a nastavte čas, napríklad 1440 (24 hodín v minútach).

Ako automaticky obnoviť relácie

Ak sa relácia vydáva na určité obdobie a končí sa dňa určitý čas, môže to spôsobiť prerušenie aktívnej relácie používateľa. Oveľa pohodlnejšie je, ak sa trvanie relácie automaticky predĺži, ak návštevník obnoví stránku. Na tento účel je tu parameter cookie_lifetime, ktorý sme vo všetkých vyššie uvedených príkladoch nastavili na 0.

Ak nastavíme hodnotu cookie_lifetime na 86400, relácia sa ukončí po 24 hodinách. To nie je vždy výhodné.

Ak je potrebné kontrolovať a prerušiť reláciu, môžete použiť funkciu PHP session_destroy().

Cesta k ukladaniu súboru relácie

Miesto uloženia súborov relácie je špecifikované parametrom session.save_path tiež taký je čas života. V predvolenom nastavení je možné použiť cestu /var/lib/php/sessions.

Toto dôležitý parameter- ak webový server nemá práva na zápis do tohto adresára, povedie to k nemožnosti ukladať relácie, čo spôsobí neočakávané výsledky z aplikácií.

Nuž, poďme na to.

Najprv si prečítajte o HTTP na tej istej wiki. Nepotrebujete to poznať dôkladne, ale mali by ste minimálne rozumieť štruktúre požiadavky/odpovede, chápte, že požiadavka a odpoveď majú hlavičky a telo (v závislosti od typu požiadavky nemusí byť telo/ odpoveď).

Takže tu to je. Cookies. Cookies žijú na strane prehliadača. Prenášajú sa v hlavičke HTTP pri každej požiadavke na server (aj keď ste išli získať obrázky). Existujú iba súbory cookie, existujú iba súbory cookie http. Súbory cookie je možné oddeliť podľa hostiteľa a cesty. To všetko nám dáva flexibilitu a pomáha s bezpečnosťou. V PHP nám obsah $_COOKIE poskytuje SAPI. Keď PHP dostane požiadavku na spracovanie, použité SAPI (php-fpm, cgi, mod_php majú svoje vlastné implementácie SAPI) momentálne vezme hlavičky a telo požiadavky, analyzuje ich a vyplní všetky tieto superglobálne polia ako $_SERVER, $_GET vrátane $_COOKIE. Všetko, čo nám klient poslal (niečo, čo robí požiadavky, je klient, niečo, čo ich spracováva, je server) a prehliadač nám posiela cookies len tie, ktoré sú možné na základe toho, kam sa požiadavka posiela. Súbory cookie sa nastavujú pomocou hlavičky Set-Cookie v odpovedi, to znamená, že tu si musíte prečítať viac o HTTP a nie o PHP. PHP vám umožňuje pracovať s týmito vecami. Súbory cookie môžete nastaviť priamo prácou s hlavičkami odpovedí pomocou hlavičkové funkcie. Okrem toho, ak nastavíte životnosť súborov cookie na 0, potom sa pri zatvorení prehliadača vynulujú tieto súbory, nie relácia, pretože všetky takéto súbory cookie zabudne.

Tu... relácie... In PHP relácia zvyčajne je to súbor. Len nejaký súbor s náhodným názvom. Ak je napríklad v php.ini zadaný session.autostart alebo sa uskutoční volanie session_start, potom sa vytvorí súbor pre reláciu používateľa (môžete ho presunúť do reďkovky alebo memcache, do svojho úložiska atď., v závislosti od vašich potrieb. Údaje môžu byť tiež šifrované, čo sa štandardne deje). Tento súbor má ID, iba nejaký náhodný reťazec. A ak sa pri spracovaní požiadavky nenájde relácia z predchádzajúcej požiadavky, vytvorí sa nová.

A teraz sa dostávame k tomu najzaujímavejšiemu – ako PHP spája reláciu z predchádzajúcej požiadavky s aktuálnou. A tu je všetko celkom jednoduché - sušienky. Keď je používateľovi priradená relácia, automaticky sa nastaví iba http súbor cookie (aby zlí ľudia nemohli ukradnúť našu reláciu z js), v ktorom je zapísaný identifikátor relácie. V ladiacom nástroji prehliadača môžete pri experimentovaní s reláciami vidieť, či máte súbor cookie PHPSESSID (názov sa dá zmeniť v nastaveniach a vo všeobecnosti sa relácie dajú prepojiť nielen cez súbory cookie, ale to sú už bezpečnostné problémy).

Keď SAPI spracuje požiadavku, ak je prítomná session.autostart, pred začatím vytvárania novej relácie sa puff ešte pozrie, či máme cookie s identifikátorom relácie, skontroluje, či nejaký má, a ak áno, upokojuje a nevytvára nový. Keďže relácia je viazaná prostredníctvom súborov cookie, môžete nastaviť životnosť tohto súboru cookie samotného (v php.ini) a tým regulovať životnosť relácie.

Tu... kedy použiť cookies a kedy relácie? Je vhodné pochopiť, že čím viac údajov je v súboroch cookie (a majú obmedzený počet slov), tým viac údajov prenesieme pri každej požiadavke. To znamená, že nie je skvelé, keď na prijatie 1 kilobajtu údajov musíme preniesť niekoľko kilobajtov súborov cookie v hlavičkách. Ľudia, ktorí sa zameriavajú na optimalizáciu, dokonca ukladajú obrázky na samostatných doménach bez súborov cookie, aby znížili objem prevádzky a paketov (zvyčajne jednoduchá požiadavka HTTP sa zmestí do veľkosti jedného TCP paketu). Ak potrebujete pracovať s týmito údajmi z JS na ľubovoľnej stránke, napríklad miestne nastavenie vybrané používateľom, aby ste mohli použiť preklady v JS, mali by ste použiť súbory cookie. Na všetko ostatné je samozrejme lepšie použiť relácie. V každom prípade na počiatočné štádiá keď nemusíte robiť niečo veľmi zložité.

Súbory cookie sú mechanizmus na ukladanie údajov prehliadača. vzdialený počítač identifikovať vracajúcich sa návštevníkov a uložiť parametre webovej stránky (napríklad premenné).

Uveďme si príklad používanie súborov cookie na konkrétnom príklade.

Povedzme, že potrebujeme napísať počítadlo návštev webu. Potrebujeme vedieť, koľko návštev stránky vykonal každý konkrétny návštevník.

Tento problém možno vyriešiť dvoma spôsobmi. Prvým je uchovávanie záznamov o IP adresách používateľov. Na to potrebujete databázu iba jednej tabuľky, ktorej približná štruktúra je nasledovná:

Keď používateľ navštívi stránku, musíme zistiť jeho IP adresu, nájsť informácie o jeho návštevách v databáze, zvýšiť počítadlo a zobraziť ho v prehliadači návštevníka. Napísať handler (skript) pre takýto postup nie je ťažké. Pri použití tejto metódy však máme nasledujúce problémy:

  • Pre každú IP adresu musíte viesť záznamy v jednej tabuľke, ktorá môže byť veľmi veľká. A z toho vyplýva, že čas procesora využívame iracionálne a miesto na disku;
  • Väčšina domácich používateľov má dynamické adresy IP. To znamená, že dnes je jeho adresa 212.218.78.124 a zajtra - 212.218.78.137. Existuje teda vysoká pravdepodobnosť niekoľkonásobnej identifikácie jedného používateľa.

Môžete použiť druhú metódu, ktorá je oveľa jednoduchšia na implementáciu a efektívnejšia. V Cookie nastavíme premennú, ktorá sa bude ukladať na disk vzdialený používateľ. Táto premenná bude uchovávať informácie o návštevách. Skript ho prečíta, keď návštevník pristúpi na server. Výhody tejto metódy identifikácie sú zrejmé. Po prvé, nemusíme skladovať súpravu zbytočné informácie o IP adresách. Po druhé, nemáme záujem o dynamické IP adresy, pretože údaje o ich návštevách sa ukladajú špeciálne pre každého návštevníka stránky.

Teraz je jasné, prečo môžeme cookies používať – na ukladanie malého množstva informácií od klienta (návštevníka) stránky, napr.: nastavenia stránky (farba pozadia stránky, jazyk, dizajn tabuľky atď.), ako aj iné informácie.

Cookies sú obyčajné textové súbory, ktoré sú uložené na disku návštevníkov webu. Súbory cookie obsahujú informácie, ktoré do nich server zaznamenal.

Programovanie cookies

Začnime programovať súbory cookie.

Ak chcete nastaviť súbory cookie, použite funkciu SetCookie(). Pre túto funkciu môžete zadať šesť parametrov, z ktorých jeden je povinný:

  • názov – určuje názov (reťazcov) priradených k súboru cookie;
  • hodnota - definuje hodnotu premennej (reťazca);
  • expire - premenná životnosť (celé číslo). Ak tento parameter nie je zadaný, súbor cookie bude „žiť“ až do konca relácie, teda do zatvorenia prehliadača. Ak je zadaný čas, potom, keď dorazí, súbor cookie sa sám zničí.
  • cesta - cesta k Cookie (reťazec);
  • doména - doména (reťazec). Hodnota je nastavená na názov hostiteľa, z ktorého bol súbor cookie nainštalovaný;
  • bezpečný - Prenos cookies cez zabezpečené pripojenie HTTPS.

Zvyčajne sa používajú iba prvé tri parametre.

Príklad nastavenia cookies:



SetCookie("Test" , "Hodnota" );

// Nastavenie súboru cookie na jednu hodinu po inštalácii:
SetCookie ("My_Cookie" , "Hodnota" , ​​čas ()+ 3600);

?>

Pri používaní cookies si prosím uvedomte, že cookies musia byť nastavené pred prvým výstupom informácií do prehliadača (napríklad operátorom echo alebo výstupom akejkoľvek funkcie). Preto je vhodné nastaviť Cookies na samom začiatku skriptu. Súbory cookie sa nastavujú pomocou špecifickej hlavičky servera a ak skript niečo vypíše, znamená to, že začína telo dokumentu. V dôsledku toho sa súbory cookie nenainštalujú a môže sa zobraziť varovanie. Ak chcete skontrolovať, či boli súbory cookie úspešne nainštalované, môžete použiť nasledujúci spôsob:

// Nastaviť súbor cookie do konca relácie:
// Ak je súbor cookie úspešne nastavený, funkcia SetCookie vráti hodnotu TRUE:
"

Súbory cookie boli úspešne nainštalované!

" ;
?>

Funkcia SetCookie() vráti hodnotu TRUE, ak bol súbor cookie úspešne nastavený. Ak sa súbor cookie nedá nastaviť, funkcia SetCookie() vráti hodnotu FALSE a možno aj varovanie (v závislosti od Nastavenia PHP). Príklad neúspešnej inštalácie cookies:

// Súbory cookie nie je možné nastaviť, pretože pred odoslaním
// V hlavičke súboru cookie zobrazíme prehliadaču reťazec „Ahoj“:
echo "Ahoj";
// Funkcia SetCookie vráti FALSE:
if (SetCookie("Test" , "Value" )) echo "

Súbor cookie bol úspešne nastavený!

" ;
inak echo "

Súbor cookie sa nepodarilo nastaviť!

"
;
// Vypíše "Cookie sa nepodarilo nainštalovať!".
?>

Súbor cookie nebolo možné nastaviť, pretože sme pred odoslaním hlavičky súboru cookie vytlačili do prehliadača reťazec „Ahoj“.

Čítanie hodnôt súborov cookie

Prístup k súborom cookie a ich hodnotám je pomerne jednoduchý. Sú uložené v superglobálnych poliach $_COOKIE a $HTTP_COOKIE_VARS .

Hodnoty sú prístupné podľa názvu nainštalovaných súborov cookie, napríklad:

echo $_COOKIE["my_cookie"];
// Zobrazí hodnoty nainštalovaného súboru cookie "My_Cookie"

Príklad nastavenia súboru cookie a následného prečítania:

// Nastaviť cookie "test" s hodnotou "Ahoj" na jednu hodinu:
setcookie ("test" , "Ahoj" , čas ()+ 3600 );
// Ďalšia požiadavka skriptu vypíše "Ahoj":
echo @$_COOKIE [ "test" ];
?>

V uvažovanom príklade je pri prvom prístupe k skriptu „test“ cookie nastavený na hodnotu „hello“. Pri opätovnom prístupe k skriptu sa zobrazí hodnota cookie „test“, teda reťazec „Ahoj“.

Pri čítaní hodnôt cookies venujte pozornosť kontrole existencie cookies, napríklad pomocou operátora isset(). Buď potlačením chybového výstupu operátorom @

Tu je príklad, ako vytvoriť počítadlo počtu načítaní stránok pomocou súborov cookie:

// Skontrolujte, či už bol nastavený súbor cookie „Smrteľník“,
// Ak áno, prečítajte si jeho hodnotu,
// A zvýšte hodnotu počítadla prístupu na stránku:
if (isset ($ _COOKIE [ "Smrteľný" ])) $ cnt = $ _COOKIE [ "Smrteľný" ]+ 1 ;
inak $cnt = 0 ;
// Nastavte súbor cookie "Mortal" s hodnotou počítadla,
// S dobou "života" do 18.07.29,
// To znamená, že na veľmi dlhú dobu:
setcookie ("Smrteľník" , $ cnt , 0x6FFFFFFF );
// Zobrazuje počet návštev (stiahnutí) tejto stránky:
ozvena "

Navštívili ste túto stránku? " .@$_COOKIE ["Smrteľný" ]. " raz

" ;
?>

Odstraňovanie súborov cookie

Niekedy je potrebné vymazať cookies. Nie je to ťažké, stačí nastaviť Cookie znova s ​​rovnakým názvom a prázdnym parametrom. Napríklad:

//Odstrániť súbor cookie "Test":
SetCookie("Test" , "" );
?>

Nastavenie poľa cookies a jehočítanie

Pole súborov cookie môžeme nastaviť pomocou hranatých zátvoriek v názvoch súborov cookie a potom prečítať pole súborov cookie a hodnoty tohto poľa:

// Nastavte pole súborov cookie:
setcookie ("cookie" , "Prvý" );
setcookie ("cookie" , "Druhý" );
setcookie("cookie", "Tretí");

// Po opätovnom načítaní stránky zobrazíme
// Zloženie poľa cookies "cookie":
if (isset ($ _COOKIE [ "cookie" ])) (
foreach ($_COOKIE["cookie"] ako $name => $value) (
echo "$meno: $hodnota
" ;
}
}
?>

Výhody používania cookies sú nepopierateľné. S ich používaním sú však aj určité problémy. Prvým z nich je, že návštevník môže zablokovať recepciu Súbory cookie podľa prehliadača alebo jednoducho vymažte všetky súbory cookie alebo ich časť. Preto môžeme mať určité problémy s identifikáciou takýchto návštevníkov.



<<< Назад Obsah Vpred >>>
Ak máte ďalšie otázky alebo vám niečo nie je jasné, vitajte u nás


Ak si všimnete chybu, vyberte časť textu a stlačte Ctrl+Enter
ZDIEĽAŤ: