Autor | Zpráva | ||
---|---|---|---|
JanS01 Profil |
#1 · Zasláno: 27. 5. 2013, 21:41:49
Dobrý den,
mám nastaveno automatické odhlášení uživatele po nějakém čase, tento čas nastavím při přihlášení (tedkon 2 hodiny), pokud se přihlásím vše se uloží a nastaví jak mám, ale pokud stránku nerefreshnu po uplynutí cca 30minut(refreshnu ji později, jsem odhlášen automaticky což nechci), pokud stránku refreshnu nebo na ní pracuji (klikání na záložky odkazy atd) alespon každou pul hodinku odhlásí mne systém automaticky po 2 hodinách jak mám nastaveno Uložení času pro odhlášení třída Login.php výňatek // nastavení času pro automatické odhlášení uživatele $logout_time = time() + (2 * 60 * 60); // aktuální čas +2 hodin $update2 = "UPDATE `uzivatele` SET `logoutTime` = '$logout_time' WHERE `username` = '$username_form'"; $login = new Login(); // ... pokud je uživatel přihlášený if ($login->isUserLoggedIn() == true) { // automaticné odhlášení if ($login->getLogoutTime() < time()) { ->getLogoutTime() vrací čas pro odhlášení $login->doTimeLeftLogout(); -> smaže session atd a přes header location přesměruje znovu na index } else { $nadpis = NAZEV_PROJEKTU . " | Admin"; include("admin/logged_in.php"); } // uživatel je přihlášen } else { // uživatel není přihlášen $nadpis = NAZEV_PROJEKTU . " | Login"; include("pages/not_logged_in.php"); } při loginu si ukládám některá data do $_SESSION(všechny session vznikají při přihlášení ve stejný čas) -> což považuji za důvod, proč se mi odhlašuje automaticky již po 30 minutách nečinosti, ovšem háček je v tom že časy nesedí php.ini session.gc_maxlifetime = 1440 -> odpovídá 24minut default nastavení || v php jsem si přes ini_set nastavil dobu dvou hodin což je hodnota 7200, ale se stejně nežádoucím účinkem session.cache_limiter = nocache session.cache_expire = 180 -> 3hodiny Všech rad si velice cením, prohladal jsem zde důkladně forum, progooglil google ale nic co jsem našel mi nepomohlo |
||
DJ Miky Profil |
#2 · Zasláno: 27. 5. 2013, 21:58:02
Nastavení
session.gc_maxlifetime přes ini_set() nebude fungovat, protože odstraňování session na Ubuntu, Debianu a možná i někde jinde provádí samostatný cron skript, který se vždy řídí hodnotou v php.ini. Pomůže tedy pouze změna v centrálním php.ini, nelze to nijak ovlivnit ve skriptech (ini_set) ani v .htaccess (php_value).
|
||
JanS01 Profil |
#3 · Zasláno: 27. 5. 2013, 22:40:12
moc děkuji za odpověď, tuto informaci jsem nevěděl a ani jsem ji nikde nenašel, gc_maxlifetime jsem nastavoval jak v samotném php souboru tak i v .htaccess a hodnotu jsem si vypisoval přes phpinfo() i přes echo proto jsem předpokládal že je to nastaveno dobře, ovšem i kdyby nebylo je defaul nastavena na 24 minut a já jsem si změřil že se mi automatické odhlášení provede až po 30-ti minutách, ovšem je možné nějaká odchylka zpoždění nbo to zapříčiní samotný cron, proto gc_maxlifetime nastavím přímo v php.ini a dám vědět
|
||
DJ Miky Profil |
#4 · Zasláno: 27. 5. 2013, 22:50:45
Cron na odstranění se alespoň na Debianu spouští jednou za třicet minut (v základu v :09 a :39 každé hodiny), na Ubuntu to asi bude podobné. Při hodnotě gc_maxlifetime 24 minut se tedy může session odstranit za 24 až 53 minut po jejím vytvoření.
|
||
JanS01 Profil |
#5 · Zasláno: 28. 5. 2013, 11:35:49
Tak jsem to právě odzkoušel a měl jste pravdu, hodnotu jsem musel změnit přímo v php.ini, restartovat apache a všechno běží jak má, bohužel pro mě jsem zjistil, že měnit gc_maxlifetime přes htaccess nepo ini_set() mají asi všechny webhostingy zakázáno, maximálně mi to některé přenastaví po zaslání žádosti emailem.
Další věc co jsem se chtěl zeptat je jak po přihlášení přes formulář zamezit znovunačtení hodnot, které si předávám přes $_POST, celkem dost jsem si toho přečetl ale jako jediný způsob co jsem našel je přesměrování přes header location, ovšem to já použít nemohu, proto by mě zajímalo jestli jde pouze refreshnout po přihlášení automaticky stránku a tím POST data smazat |
||
DJ Miky Profil |
#6 · Zasláno: 28. 5. 2013, 12:41:21
Na sdíleném webhostingu to bude vždycky problém, pokud používají Debian/Ubuntu nebo provozují PHP jako modul do webserveru (Apache). Každá hostovaná doména by totiž musela mít vlastní adresář pro sessions a vlastní php.ini, podle kterého pak bude prováděno čištění sessions klasickým způsobem (při každém spuštění s pravděpodobností
session.gc_probability / session.gc_divisor ). Změna přes .htaccess nebo ini_set() by nefungovala, i kdyby byla povolená, z výše uvedených důvodů.
Vlastní adresář pro sessions by šel asi zajistit i na sdíleném hostingu pomocí session.save_path (a poté nastavením session.gc_maxlifetime /gc_probability /gc_divisor ). Pokud to hosting neumožní, pak je řešením buď změna hostingu nebo přechod na VPS, kde je možnost libovolně si upravovat nastavení.
Ohledně přesměrování, u POST formulářů se to běžně dělá pomocí přesměrování s HTTP kódem 303 (See Other): header('Location: ...', true, 303); exit; |
||
JanS01 Profil |
#7 · Zasláno: 28. 5. 2013, 13:51:55
Díky moc za cenné rady, vyzkouším a uvidím, ta expirace session mě zastak netrápí dá se to udělat i jináš ale dobu loginu jsem chtěl delší pro platnost session
|
||
Časová prodleva: 11 let
|
0