Session & munkamenetkezelés
Sziasztok.
Olvastam párszor Hodicska Gergely cikkeit és más helpeket, de sajnos még mindig nem vagyok tisztába a session-kezeléssel.
Készítettem 3 oldalt: index1.php, login.php, index2.php
index1.php: bejelentkező oldal, 2 mező és POST-al elküldöm a két adatot a login.php-nek.
login.php: na és gondolom én, itt kellene létrehoznom egy sessionID-t, letárolni cookie-ba, session_start, adatok ellenőrzése:
- ha jók: akkor a beírni a munkamenet-kezelő táblába (sessID,created,last modified stb...), és header("Location: index2.php");
- ha nem jó, akkor: session_destroy(); és header("Location: index1&login=bad.php");
index2.php: itt meg az oldal elején leellenőrzöm, hogy a a client cookie-ában levő sessid ugyanaz-e mint az adatbázisomban levő.
Szóval, kérdéseim a következők. :)
1) Ez az elképzelésem jó-e egy biztonságos beléptetéshez, ill. oldalhasználathoz ?
2) pontosan hogy is van ez a session- és cookie-kezelés? Mely parancsok következnek egymásután (pl.: set-cookie, session_start, session_write_close stb.) ??
3) A session_set_save_handler-t hogyan tudom beállítani ibase-hez??
Várom válaszotokat, előre is nagyon köszönöm!
üdv.: giz
■ Olvastam párszor Hodicska Gergely cikkeit és más helpeket, de sajnos még mindig nem vagyok tisztába a session-kezeléssel.
Készítettem 3 oldalt: index1.php, login.php, index2.php
index1.php: bejelentkező oldal, 2 mező és POST-al elküldöm a két adatot a login.php-nek.
login.php: na és gondolom én, itt kellene létrehoznom egy sessionID-t, letárolni cookie-ba, session_start, adatok ellenőrzése:
- ha jók: akkor a beírni a munkamenet-kezelő táblába (sessID,created,last modified stb...), és header("Location: index2.php");
- ha nem jó, akkor: session_destroy(); és header("Location: index1&login=bad.php");
index2.php: itt meg az oldal elején leellenőrzöm, hogy a a client cookie-ában levő sessid ugyanaz-e mint az adatbázisomban levő.
Szóval, kérdéseim a következők. :)
1) Ez az elképzelésem jó-e egy biztonságos beléptetéshez, ill. oldalhasználathoz ?
2) pontosan hogy is van ez a session- és cookie-kezelés? Mely parancsok következnek egymásután (pl.: set-cookie, session_start, session_write_close stb.) ??
3) A session_set_save_handler-t hogyan tudom beállítani ibase-hez??
Várom válaszotokat, előre is nagyon köszönöm!
üdv.: giz
Szia,
szerintem kicsit túlbonyolitottad igy a kezdésnél. Alapból nem adatbázisban tárolja a PHP (és te sem) a munkameneteket, ez csak akkor van, ha te igy akarod szándékosan. Neked nincs más dolgod, csak session_start() minden fájl legelején és utána éppúgy használod mint akármilyen más változókat:
$_SESSION['akarmi']=1;
az a másik fájlban is ennyi lesz ha kiolvasod:
$a=$_SESSION['akarmi']
Aztán persze vannak olyanok, hogy register globals ON/OFF, és akkor kicsit más, de ha "új" PHP-d van és normálisan van konfigurálva akkor túl sok meglepetés nem lehet.
ui: A sütikkel sem neked kell törődnöd.
hmm..
Én adatbázisban szeretnék tárolni.
A sessionid nevét át szeretném nevezni, ill. én szeretném megszabni a karaktersorozatját.
S a sütikkel kapcsolatban meg, hogy abban szeretném letárolni a kliensen a sessionid, mint már írtam.
-giz
Szia,
"Én adatbázisban szeretnék tárolni."
Ehhez a session_set_save_handler() függvénnyel kell felülbirálnod azt, hogy melyik müveletet milyen saját függvényekkel szeretnél kiváltani. Egészen jól le van irva a PHP súgóban magyarul:
http://hu.php.net/manual/hu/function.session-set-save-handler.php
"S a sütikkel kapcsolatban meg, hogy abban szeretném letárolni a kliensen a sessionid, mint már írtam."
Az a PHP elvégzi helyetted.
"Minden webhelyedre látogató egy-egy egyedi azonosítót kap, az úgynevezett munkamenet azonosítót (session azonosítót). Ez vagy egy sütiben (cookie) tárolódik a látogató gépén, vagy az URL-ben közlekedik oldalról oldalra."
Tehát ezzel nem neked kell szenvedned.
Apró lépések
Ez alapesetben igaz, de elég sokrétűen lehet konfigurálni.
Eredeti kérdésre: én úgy érzem, hogy elég sok bizonytalan pont van benne a témakörrel kapcsolatban. Azt tanácsolom neked, hogy első körben fordíts elegendő időt arra, hogy megértsd az alapokat. Próbáld ki pl. hogy mi is történik a háttérben (pl. firefox livehttpheaderrel szépen lehet látni), erre folyamatra milyen hatással vannak a különböző PHP beállítások, mi történik akkor, ha nem engedélyezed a cookie-kat a böngészőben ilyesmi.
Utána jöhet a DB-ben való tárolás. Miért szeretnéd amúgy ott tárolni?
Felhő
Az a baj, hogy nincs időm
Adatbázisban szeretném tárolni a session-el kapcsolatos információkat, mert gyorsabb, átláthatóbb, jobb. (mondjuk nem biztos, h gyorsabb:)
Abban segítsetek légyszíves (konkrét függvényekkel!), hogy hogyan tudom, session_id nevét átírni, mikor használjak session_startot, hogyan tároljam le cookieban a session_id-t, hogy töröljem onnan, valamennyi idő után elavuljon.
Tulajdonképp egy korrekt biztonságos munkamenet-kezelést szeretnék megérteni/létrehozni (2-3 napon belül)... Ez lehet, hogy lehetetlen !? :)
Köszi nektek, giz
A biztonságos session
Az mennyire biztonságos, ha csak egy session_start-ot használok, de a session id-vel egyátalán nem foglalkozom? (nem tárolom url-ben, illetve nem használok direkt set-cookie-t) Tehát hagyom, hogy a szerver le, a böngésző pedig visszaküldje az id-t mikor kommunikációra kerül sor. Ilyenkor is 100%-ig biztos lehetek abban, hogy a userek munkamenetei nem keverednek össze?
mivel minden munkamenet
ferenc voltam