Registrace nového uživatele     Návod     Kluby     Archív  Lopuchu     Lopuch.cz  

Tolik rozruchu
jen v Lopuchu

Lopuch.cz

Jméno:
Heslo:
Podpora LCD:
 
Klub PHP [ŽP: neomezená] (kategorie Programování) moderuje makovec.
Archiv
Diskuse o vybornem skriptovacim jazyku php. Dulezite odkazy, pred polozenim dotazu zkuste hledat odpoved zde:
  1. www.php.net - domovská stránka PHP
  2. www.kosek.cz - spousta tutorialu pro PHP v češtině
  Nastavení klubu     Nastavení práv     Homepage     Anketa     Přítomní     Oblíbené     Lopuch     Kategorie  
autor: 
text: 
vyplnit a 
Help
 Titulek, text příspěvku  
Opište pozpátku následující text bez prostředního znaku: neqmkoq
[ 1845 ] <Novější  <<<Nejnovější  Nejstarší>>>  Starší>  
themajkl themajkl All those moments will be lost in time - like tears in rain. 15.5.2009 06:42  2668
puschpull [2667]: Tak ale to ti přímo psalo v tom chybovém hlášení, cos posílal, ne? Ono to vypadalo z popisu, že to máš nastaveno stejně, ale chová se to jinak.
puschpull puschpull být nad věcí, pohoda a klid ... - AV-Com (Homepage) 15.5.2009 06:38 - Oblíbené kluby (11:03) 2667
...ohledně nefunkčnosti na modulu fastcgi vs. apache

to že web nefungoval na ebola.cz a fungoval na forpsi.com a localhost je tím, že na těch dvou mám register globals "on" a na ebole je "off"

samozřejmě mi to zatím usnadní ladění, že si na localu také zapnu na "off"

z hlediska bezpečnosti je na webovém serveru obecně doporučováno mít globální proměnné vypnuté

(alespoň vidíte, co jsem za "umělce")

dnes si vytvořím nějaké maximálně jednoduché stránky na testování a bych pochopil jak fungují Session a jak se chovají při register globals off
bredy 14.5.2009 23:49  2666
huhOno je to jedno, protože ty funkce už nejsou tak složité, aby se na to musely dělat callbacky. Pokud má tvůj framework handlery na začátek a konec stránky, není problém tam prdnout funkce load_session(), save_session() a při zalogování zavolat funkcí create_session(). Implementaci těch funkcí jsem tu z části napsal, části si určitě domyslíš.
huh huh 14.5.2009 22:08  2665
Jenomže PHP umí -- a na to EtDirloth odkazoval -- použít vaši vlastní implementaci session.
mpts mpts Je to jinak, ba přesně naopak! 14.5.2009 21:14  2664
EtDirloth [2662]: On takový oblek z konfekce taky může být kvalitní a slušivý, ale oblek na míru je holt oblek na míru.
bredy 14.5.2009 20:21  2663
EtDirlothNo několik důvodů.
1) Kolikrát se mi stalo, že sessions z nějakého důvodu na hostingu nechodily
2) Mohu celkem dobře sledovat množství přihlášených lidí a jejich aktuální aktivitu (což se hodí zejména, pokud mám podezření, že někdo škodí).
3) Samozřejmě mohu otevřené sessions různě odhlašovat
4) Mohu si libovolně nastavovat expiraci
5) Informace o session jsou v databázi, nikoliv na serveru v adresáři /tmp
6) pokud jsou použity hash tabulky, pak mám podezření, že jsou i rychlejší
7) sessions lze i tímto způsobem sdílet mezi různými službami, pokud jsou schopni si vidět do databází (ale pravda, dá se to řešit i jinak)
etdirloth EtDirloth 14.5.2009 19:50  2662
vlastne sessionspuschpull [2653], Bredy [2647]:
Preco nepouzit user-level session storage? Mam to vyskusane.

Bredy, vazne mas pre vlastnu implementaciu nejaky rozumny dovod?
themajkl themajkl All those moments will be lost in time - like tears in rain. 14.5.2009 15:07  2661
Ty bys byl taky paranoidní, kdyby tě chtěl každej zabít!
bredy 14.5.2009 14:51  2660
machTo máš marné. Přesvědčovat paranoika, že ho nikdo nesleduje je zbytečný. Pořád bude tvrdit, že je středem vesmíru a že na něj mají políčeny všechny tajné služby světa.
mpts mpts Je to jinak, ba přesně naopak! 14.5.2009 14:42  2659
mach [2658]: ehm...
mach 14.5.2009 14:29  2658
themajlk| Ne že bych zcela souhlasil k Kdokolivem, ale argumentům,
| jak se to dělá pro dobro uživatele, nevěřím ani za mák.

Nedela se to kvuli uzivateli. To je jen sideeffect. Dobro uzivatele webove aplikace se vetsinou shoduje s dobrem provozovatele.

puschpull puschpull být nad věcí, pohoda a klid ... - AV-Com (Homepage) 14.5.2009 13:05 - Oblíbené kluby (11:03) 2657
Bredydíky moc
zatím jsem si to uložil, ale neodhodlal jsem se do toho pustit
až později v klidu
bredy 14.5.2009 12:56  2656
Jen malé nakopnutí (za chyby neručím)Načtení session
if (isset($_COOKIES["session"])) {
   $hash = $_COOKIES["session"];
   $res = mysql_query("SELECT `data` FROM `session` WHERE `hash`='$hash'")
   $data = mysql_fetch_row($res);
   $sdata = $data[0];
   $mysession = unserialize($sdata);
   $mysession["dirty"] = 0;
   $mysession["id"] = $hash;
}


Aktualizace session
if (isset($mysession) && $mysession["dirty"] == 1) {
   $hash = $mysession["hash"];
   unset($mysession["hash"]);
   unset($mysession["dirty"]);
   $sdata=serialize($mysession);
   mysql_query("REPLACE `session` (`hash`,`data`,`expires`)VALUES('$hash','$sdata',NOW() + INTERVAL 1 HOUR)");
}


Vyrobení session je podobně. Ještě bych tam z bezpečnostních důvodů vrazil addslashes a stripslashes u dat vkládaných a čteních z DB

z $mysession se pak pracuje stejně jako se $_SESSION. Jen pozor, že není superglobální, takže ve funkcích se musí deklarovat jako global. Při změně hodnot v poli se musí na konec udělat $mysession["dirty"] = 1
puschpull puschpull být nad věcí, pohoda a klid ... - AV-Com (Homepage) 14.5.2009 12:44 - Oblíbené kluby (11:03) 2655
Bredydík
koukám, že celá asi zase lehce za hranicí mých schopností
:-)
bredy 14.5.2009 12:36  2654
puschpull Jednoduše, jakmile potřebuješ session (a nemáš ji), vyrobíš koláček, do něho uložíš nějaký HASH (třeba zahashovaný systémový čas v mikrosekundách), založíš v tabulce "sessions" (tebou k tomu účelu vytvořenou, může být i ten typ, co se alokuje v paměti sql serveru) řádek s klíčem toho hashe. Do řádky si nastrkáš vše co potřebuješ sledovat. Druhá možnost je tam dát TEXT políčko a do něho serializovat nějaké pole (třeba $mysession).

Na začátku stránky vždycky vyzvedneš koláček, vyzvedneš řádek z tabulky podle koláčku, deserializuješ $mysession. Pokud $mysession v průběhu zpracování skriptu změníš (doporučuju dělat formou $mysession["dirty"]=1), tak na konci skriptu proměnou serializuješ a uložiš do databáze.

Doporučuju ještě do tabulky vpašovat čas expirace a při zakládání nové session provést DELETE FROM `sessions` WHERE `expires` < NOW()

PS: Ještě k tomu hashi, pokud ti selže INSERT INTO pro duplicitní klíč, není problém generování zopakovat :-). Jenom abych se vyhnul tomuto dotazu :-)

[ 1845 ] <Novější  <<<Nejnovější  Nejstarší>>>  Starší>  

(c) 2001-2011 Lopuch.cz   
Kontakt