Autor | Zpráva | ||
---|---|---|---|
H13 Profil |
#1 · Zasláno: 16. 7. 2006, 17:37:44
Ahoj, neznáte někdo nějaký článek nebo návod, který by řešil jednoduše v PHP:
Přihlášení - prohlížení více stránek (převod hesla mezi stránkami) Odhlášení - manuální, automatické např. po 10 min nečinnosti Díky Honza |
||
TooFew Profil |
#2 · Zasláno: 16. 7. 2006, 18:24:51
Podívej se na http://www.linuxsoft.cz/php/ do kapitol o formulářích a o sessions.
|
||
H13 Profil |
#3 · Zasláno: 16. 7. 2006, 22:13:14
Podívej se na http://www.linuxsoft.cz/php/ do kapitol o formulářích a o sessions.
No pročetl jsem ty články a moc jsem se toho nedozvěděl...ty kódy jsou tam nedodělaný, v popisu tam někdo píše o automatickém odhlášení, ale do příkladu to nedá, pak tam používá u session unset, což mi tady v diskuzi charlie psal, že je to problémové...Pak tam mluví o přenášení hesel na více stránek, ale v příkladu použije jen jednu společně s větvením...no a nakonec tam napíše, když je kritizován za špatný a chybný příklady, že příklady jsou zjednodušený, aby to bylo více pochopitelný...No a to už jsem nevydržel, protože učit se ze špatných ale pochopitelných příkladů...na to opravdu nemám trpělivost |
||
TooFew Profil |
#4 · Zasláno: 17. 7. 2006, 00:48:04
No tak nevim. Ja tam vsechny priklady chapu a jako navod mi to pripada docela srozumitelne. Kdyby mel vypisovat cele priklady, asi by to psal dodnes ;-). Nicmene, musis zapojit fantazii a pak to jde. Ja mam na jednom svojem webu taky prihlasovani pres sessions a formulare a ucil jsem se jen z tohoto navodu.
|
||
H13 Profil |
#5 · Zasláno: 17. 7. 2006, 10:34:12
No já už jsem si systém přihlašování a odhlašování vytvořil, funguje mi na více webech...Jenže protože jsem se učil ze špatných příkladů, který upřednostňovali pochopitelnost před správností a úplností, tak jsem dopadl tak, že mi to sice funguje, jenže to není vůbec ošetřený proti případným chybám (výpadek serveru, ukládání zbytečných dat, atd...)
Proto bych byl rád za nějaké úplné a správné (i když to je samozřejmě neobjektivní) řešení... |
||
krteczek Profil |
#6 · Zasláno: 17. 7. 2006, 10:50:53
Prostě to funguje nějak následovně:
1. nejprve musíš inicializovat session
2. vytvoříš přihlašovací formulář a na začátek skriptu umístíš podmínku která bude kontrolovat jestli byli odeslané přihlašovací údaje, a ověříš platnost přihlašovacích údajů.
3. Pokud přihlašovací ůdaje souhlasí nastavíš session proměnnou $_SESSION['prihlasen']
4. Pokud nesouhlasí do proměnné ulolžíme chybovou hlášku a tu potom zobrazíme na stránce
5. ještě musíme vytvořit odhlašovací podmínku
až potud jsou to podmínky které musí být před odesláním jakýchkoliv hlaviček kvůli použití header location 6. další podmínkou kontrolujeme, jestli je nastavena session $_SESSION['prihlasen'] a pokud ano zobrazíme to někde na stránce spolu s linkem vedoucím k odhlášení
a toto je celé kouzlo přihlášení/odhlášení. ted stačí jen ověřovat jestli je dotyčný přihlášen krteczek |
||
H13 Profil |
#7 · Zasláno: 17. 7. 2006, 11:59:05
krteczek
Tak to je přesně to co jsem potřeboval, díky...teď ještě jednu maličkost...jak nejlépe do toho skriptu zabudovat automatické odhlášení např. při 10 minutové nečinnosti |
||
24k_work Profil * |
#8 · Zasláno: 17. 7. 2006, 12:01:30
<?
session_start(); $limit=15; if ((time()-$_SESSION['akce'])>$limit) { echo "odhlasen"; } else { echo "alive"; } if ($_GET['url']) { $_SESSION['akce']=time(); } ?> |
||
H13 Profil |
#9 · Zasláno: 17. 7. 2006, 15:08:42
($_GET['url'])
tak tomuhle nerozumím, rozumím tomu, že se v session změní čas a vlastně se posune čas automatického odhlášení, ale nevím při jaké příležitosti - ($_GET['url']) ?? |
||
DJ Miky Profil |
#10 · Zasláno: 17. 7. 2006, 20:31:45
H13
Čas autom. odhlášení se posune, když se načte nějaká stránka ($_GET['url'] je nenulové) |
||
krteczek Profil |
#11 · Zasláno: 17. 7. 2006, 20:35:22
H13: Platnost session je sama o sobě omezená, Většinou na cca 15 minut, existuje directiva kterou lze nastavit platnost session cookies přímo za běhu scriptu ini_set('session.gc_maxlifetime',čas v sekundách po kterém má platnost skončit); .
Ještě lze doplnit před nastavení přihlašovací cookie (u mne bod 3) session_regenerate_id() tim se vytvoří nové id session cookie
krteczek |
||
H13 Profil |
#12 · Zasláno: 17. 7. 2006, 22:32:14 · Upravil/a: H13
DJ Miky
Čas autom. odhlášení se posune, když se načte nějaká stránka ($_GET['url'] je nenulové) tak to mi tam asi ještě něco chybí ??? Notice: Undefined index: url in ... Zajímalo by mě co se stane, když trochu změním výše uvedený kód (funguje to, nevím však, "jestli to nemá nějaké vedlejší účinky") Vedle kódu od 24k_work jsem vyznačil změnu: ----------------------------------------------------------- session_start(); $limit=15; if ((time()-$_SESSION['akce'])>$limit) { echo "odhlasen"; } else { echo "alive"; ......................zmena: pridan radek $_SESSION['akce']=time(); } if ($_GET['url']) ...................zmena: vynechano { ...................zmena: vynechano $_SESSION['akce']=time(); ...................zmena: vynechano } ...................zmena: vynechano ?> No a výsledek by měl být, že pokud není stránka aktualizovaná do 15 sec, pak se automaticky ukončí session (else "odhlasen")...Když se obnoví stránka a je obnovena do 15 sec., pak se vypíše "alive" a podle mě to znamená, že v tu chvíli se může posunout čas ... ($_SESSION['akce']=time();) |
||
anode Profil |
#13 · Zasláno: 18. 7. 2006, 01:06:05
krteczek: Hodnota HTTP hlavičky Location pro přesměrování by měla obsahovat absolutní adresu (viz RFC 2616: HTTP/1.1). A ještě bych doplnil, že ini_set() pro nastavení session.gc_maxlifetime se musí zavolat ještě před voláním session_start(), jinak už nemá efekt.
|
||
krteczek Profil |
#14 · Zasláno: 18. 7. 2006, 08:20:48
anode: Díky za doplnění, nebyl jsem si jistý tím, kdy se ta directiva musí volat, ale vlastně z logiky věci to samo vyplývá (už mi to včera nemyslelo), nejprve je třeba nastavit dobu platnosti a teprva potom iniciovat session a používat je :-)
takže při použití té directivy není třeba ošetřovat dobu platnosti přihlášení, stačí na začátku scriptu použít
Navíc je dobré uložit si ip adresu klienta, jeho prohlížeč, a další věci zjistitelné o klientovi, vygenerovat náhodný text a posílat ho ze skrytých inputů formulářů a zároveň v session, a vždy po reloadu stránky kontrolovat jestli se shodují (myslím že je zbytečné zatěžovat každé zobrazení stránky dotazy na databázi). krteczek |
||
anode Profil |
#15 · Zasláno: 18. 7. 2006, 10:12:01
Ono nastavení životnosti session je vlastně příkaz pro garbage collector, který se při session_start() s určitou pravděpodobností (dle nastavení) spustí. Pokud se spustí, smaže veškeré session-data soubory, které jsou starší než zadaná životnost, takže na tohle pozor, když už používat tohle řešení se zastaráváním celé session, tak dělat to stejně (a se stejným časem) na celém webu, jinak hrozí, že to návštěvníkovi na jiné stránce, na které ten limit takto nechceme, smaže session pod rukama, protože jiný návštěvník zrovna spustil garbage collector, který všechna session-data pod 5 minut smazal (garbage collector nerozlišuje, s jakou životností byla session uložena, zajímá ho pouze stáří).
Pokud tedy chceme např. uživatelsky definovatelný čas automatického "odhlášení", je lepší uložit do session čas posledního požadavku a kontrolovat (jako výše) anebo tak nastavit platnost jeho cookie (přes session_set_cookie_params). Co se týká ukládání IP adresy, informace o prohlížeči apod., nejsem moc velký fanda tohoto přístupu. Když už, tak kontrolovat pouze IP a to navíc pouze pokud si to uživatel přeje. Při použití vytáčeného připojení, které je u nás stále dost používané, mohou různé požadavky téhož uživatele přijít z různých IP adres. Po cestě je taky proxy ISP... |
||
H13 Profil |
#16 · Zasláno: 18. 7. 2006, 12:06:30 · Upravil/a: H13
No protože potřebuji přihlášení pro více stránek, zdá se mi kontrolování času na každé stránce, kterou lze zobrazit jen při přihlášení, jednodušší - jestli to dobře chápu, pak stačí na všech stránkách (kromě té přihlašovací) kontrolovat pouze to, zda je aktivní session - přihlášení a session - čas ....
To znamená: Přihlašovací stránka: 1. Kontrola login a password (z formuláře) 2. Vytvoření session (přihlášení, čas) 3. Kontrola session (přihlášení, čas - kontrola automatického odhlášení) 4. HTML - formulář pro zadání login a password 5. Zobrazení obsahu Ostatní stránky (které budou zobrazeny jen při přihlášení) 1. Kontrola session (přihlášení, čas - kontrola automatického odhlášení) 2. Zobrazení obsahu ??? Ještě bych měl otázku, co se týče bezpečnosti... Co mám vložit do proměnné $_SESSION["prihlasen"] Předpokládám, že výše uvedená hodnota 1 funguje pouze jako příklad: Nastavení: $_SESSION["prihlasen"]=1; Kontrola: if ((!empty($_SESSION["prihlasen"])) and ($_SESSION["prihlasen"]===1)) |
||
Časová prodleva: 9 měsíců
|
|||
Kereal Profil * |
#17 · Zasláno: 21. 4. 2007, 01:28:46
zkousel jsem tenhle i jiny ruzny kody, ale hazi mi to vzdycky chybu. konkretne radek 16, u podminky
if ((!empty( $_POST["login"])) and (!empty($_POST["password"])). jiny skripty co jsem zkousel me prihlasej jenom na to prvni nacteni stranky, pri znovunacteni me odhlasi... nevite nekdo co s tim? |
||
anode Profil |
#18 · Zasláno: 21. 4. 2007, 01:41:21
Kereal: Žel nikdo nemá věšteckou kouli, aby věděl, jakou "chybu to hází".
|
||
Časová prodleva: 8 dní
|
|||
Kwíííítek Profil * |
#19 · Zasláno: 28. 4. 2007, 18:41:43
myslím, že to kluci popsali dobře, jen by mě ještě zajímaly ty parametry session["prihlaseni"] na bezpečnost. Na http://php.vrana.cz/obrana-proti-sql-injection.php je taky zajímavý článek o "očištění" proměnné z INPUTu o injekce před zpracováním.
drogy, sex a programování :) |
||
Časová prodleva: 17 let
|
Toto téma je uzamčeno. Odpověď nelze zaslat.
0