Portál AbcLinuxu, 8. července 2025 14:01


Dotaz: Oštření odhlášení uživatele v PHP

30.3.2012 13:38 Host
Oštření odhlášení uživatele v PHP
Přečteno: 900×
Odpovědět | Admin
Dobrý den, pokud je uživatel přihlášený tak při každém načtení jakékoliv stránky kontroluji čas uložený v session který jsem vytvořil při přihlášení. Pokud je čas vyšší než čas který je nastaven pro odhlášení, dojde ke smazání session a uživatel je tak automaticky odhlášen a presměrován na přihlašovací stránku s oznámením, že byl z důvodu nečinnosti odhlášen, v opačném případě se v session nastaví aktuální čas jako při přihlášení. Pokud je čas nastaven třeba na 15 minut pro kontrolu aktivity uživatele a čas je o něco málo větší vše funguje ok, ale pokud je uživatel neaktivní třeba hodinu tak nastává problém. Stránka se sice na přihlášení do systému přesměruje ale již se nezobrazí hláška, která mu v normálním případě oznamuje, že byl z důvodu delší neaktivity odhlášen. Jako by se po delším čase sessiony všechny smazaly a php script topoté vyhodnotil jako že uživatel není přihlášený. Vůbec nevím co může být špatně. Poradí někdo? Díky

# Přihlášení do systému
if(....){
# Data z formuláře se shoduji s daty v mysql
$_SESSION['user_id'] = $id;
$_SESSION['user_time'] = time();
}
# Kontrola aktivity
function check_activities(){
if(isset($_SESSION['user_time'])){
if($_SESSION['user_time'] < (time() - LOGOUT_TIME)){
unset($_SESSION['user_time']);
echo "Byli jste automaticky odhlášeni ze systému z důvodu delší neaktivity!";
}else{
$_SESSION['user_time'] = time();
}
}
}
Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

Josef Kufner avatar 30.3.2012 13:51 Josef Kufner | skóre: 70
Rozbalit Rozbalit vše Re: Oštření odhlášení uživatele v PHP
Odpovědět | | Sbalit | Link | Blokovat | Admin
Namísto session použij svou vlastní přihlašovací cookie (session můžeš ponechat na ostatní věci). Při kontrole pak zjišťuj napřed přítomnost cookie a pak teprve záznam v databázi. Pokud cookie existuje a je neplatná, tak udělej odhlášení bez ohledu na to, co je v databázi.
Hello world ! Segmentation fault (core dumped)
30.3.2012 13:59 Host
Rozbalit Rozbalit vše Re: Oštření odhlášení uživatele v PHP
Tak to se omlouvám, ale vůbec jsem nepochopil tvou myšlenku..
Josef Kufner avatar 30.3.2012 19:44 Josef Kufner | skóre: 70
Rozbalit Rozbalit vše Re: Oštření odhlášení uživatele v PHP
Uložíš si informaci o tom, že byl klient přihlášený u něj, takže i když ti expiruje session, tak to budeš vědět (klient ti tu cookie pošle zpět) a můžeš ho poslat na přihlašovací stránku.
Hello world ! Segmentation fault (core dumped)
30.3.2012 14:04 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
Rozbalit Rozbalit vše Re: Oštření odhlášení uživatele v PHP
Odpovědět | | Sbalit | Link | Blokovat | Admin
Co je špatně:
může se jednat o platnost session COOKIE, která je definována v php.ini, a můžete ovlivnit pomocí session_set_cookie_params();
ale daleko pravděpodobněji o platnost session, což je možné ze skriptu ovlivnit pomocí ini_set(’session.gc_maxlifetime’, 2400);.
To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
Josef Kufner avatar 30.3.2012 19:54 Josef Kufner | skóre: 70
Rozbalit Rozbalit vše Re: Oštření odhlášení uživatele v PHP
Tím ale zbytečně zvyšuje zátěž serveru, protože si musí pamatovat více session a to znamená více souborů na disku k ohlídání.

Záleží sice na povaze aplikace jak moc rozumné to je, ale pokud si takovou session vyrobí pro každého uživatele, který jen projde kolem, může se z toho server celkem zadýchat.

Lepší je nechat session platnou nějak rozumně málo a pokud uživatel dělá něco hodně dlouho na jedné stránce, tak tam udělat třeba průběžné ukládání na server, čímž se jednak prodlouží session a také uživatel neztratí svou práci při pádu prohlížeče nebo spojení.
Hello world ! Segmentation fault (core dumped)
30.3.2012 20:09 Kit
Rozbalit Rozbalit vše Re: Oštření odhlášení uživatele v PHP
Více session nemusí být problém. Jsou to většinou jen malé soubory v adresáři, při větší zátěži je možné je uložit do nějaké databáze. A nemusí to být jen MySQL. Session v ramdisku může být také zajímavou variantou.

Průběžné ukládání se dá realizovat například pomocí AJAXu, který se aplikacích vyskytuje poměrně často. Stačí například pravidelně obnovovat počitadlo přijatých zpráv v kratším intervalu, než je platnost session. Průběžné ukládání rozepsaného textu je také zajímavou možností.
30.3.2012 20:30 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
Rozbalit Rozbalit vše Re: Oštření odhlášení uživatele v PHP
Neřeším co uživatel dělá, jen jsem odpovídal „co je špatně“ a jak jsem si to přeložil „proč se to děje“.
Nicméně „více souborů na disku k ohlídání“ - to nic není, jestli je tam 1000 souborů nebo 3000 souborů žádný server nezabije (pokud to není nějaký server s 10000 přístupy / hodinu).

S poslední větou samozřejmě souhlasím.
Obvykle to ženu opačným směrem než tazatel, zkracuji životnost až na několik minut, aplikace si pinká (omezenou dobu) a oživuje platnost, a uživatel si může obnovit tuto dobu, nebo se mu sama při akci obnoví.
Např. Životnost session jen 10 min (PHPSSID cookie třeba 20 min), platnost přihlášení 7 min aplikace co 3 min pinkne na server a dělá to sama ½ hodiny (½ hodiny se obnoví uživatelskou akcí) ... za 33 min je uživatel odhlášen. Trochu to samozřejmě zatěžuje server zbytečnými požadavky (, které jsou ovšem velmi malé a nenáročné), nicméně je naprosto jasné i na straně serveru/aplikace kdo žije a kdo i něco dělá.
To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
Josef Kufner avatar 30.3.2012 22:53 Josef Kufner | skóre: 70
Rozbalit Rozbalit vše Re: Oštření odhlášení uživatele v PHP
Pokud by někdo nastavil životnost session na pár dní, aby přihlášení přežilo do další návštěvy, tak by to znamenalo už desítky tisíc souborů při cca tisícovce unikátních návštěv za hodinu. To už na výkonu může být znát. Také to bude žrát pár desítek až stovek megabajtů prostoru (i když prostý součet délek souborů bude malý) a hromady malých souborů nejsou pro souborové systémy zrovna ideální.
Hello world ! Segmentation fault (core dumped)
31.3.2012 12:46 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
Rozbalit Rozbalit vše Re: Oštření odhlášení uživatele v PHP
Popravdě, nenapadl mě takový extrém nastavit životnost session na několik dní :( to bylo dost ujeté.
To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.