ugrás a tartalomhoz

Munkamenet függvények

Anonymous · 2005. Jún. 28. (K), 11.58
Sziasztok

végigolvastam ebben a témakörben az írásokat de amit keresek azt sehol nem találtam.
Szóval nem látom át a session-ökkel való munka előnyeit, hátrányait és működésüket.
1. session_start(): ez talán a legvilágosabb; létrehoz egy munkamenet azonosítót, amit a session_id()-vel lekérdezhetek. A session_start()-ot minden oldalon meg kell hívni, akkor tudok dolgozni a létrehozott azonosítóval vagy többel.
2. session_register(): a működését értem, eltárolom az létrehozott azonosítót.
De hova? ez egy cookie lesz? vagy ez csak a memóriában lesz megtalálható?...
3. a legnagyobb probléma a session-ök gyakorlati használatával van: a legegyszerűbb dolgot szeretném csinálni: ember bejelentkezik, utánna lépked a lapokon és akkor jelentkezik ki, ha rákattint a kijelentkezés linkre vagy gombra.
Ha valaki tudna adni egy egyszerű progit, amiből látom a működést, akkor nagyon hálás lennék vagy akármi.

Kösz
Zsolt
 
1

Két cikk is foglalkozik a témával

Török Gábor · 2005. Jún. 28. (K), 13.22
Hodicska Gergely tollából két kiváló cikk is olvasható itt a Weblaboron munkamenet-kezelés témakörben, nyálazd át őket:


--
slink
http://20y.hu/
2

kösz, megnézem őket...

Anonymous · 2005. Jún. 28. (K), 13.27
kösz, megnézem őket...
3

Munkamenet függvények

Anonymous · 2005. Jún. 29. (Sze), 22.04
Szia!

Röviden:

A munkamenet függvénnyel egy filet hozol létre a szerveroldalon, amiben megadott változók értékeit tudod eltárolni. Ezekre a változókra utána ugyan úgy tudsz hovatkozni, mint "rendes" társaikra.

Belépés:

Ürlappal átküldesz egy nick és egy password mezőt:

Leellenörzés után, ha létezik ilyen felhasználó, akkor töltse fel ezeket az adatokat a munkamenetbe:

session_start();
session_register( "nick" );
session_register( "pssw" );

Utána minden oldalon végrehajtod az ellenörzést.

A kilépésnél létre kell hozni egy új php-filet:

<?php
session_start();
session_unset();
session_destroy();
header ( "location: index.php" );
?>

Ha az oldal lefut, akkor törlődik a munkamenet, vagyis a felhasználó kilép.
4

válasz

Anonymous · 2005. Jún. 30. (Cs), 09.12
köszi, ez jó írás de eszembe jut még pár kérdés:

"és utánna végrehajtod minden oldalon az ellenőrzést..." igazából pont ez érdekel. mit ellenőrzök? van-e munkamenet elindítva? mivel hasonlítom össze?
Végül: mindenhol azt olvasom, hogy a header location előtt nem lehet semmi. És tényleg nem szokott működni, abban amit írtál pedig sok mminden van a header location előtt.
Mi az igazság?

Köszi minden infót...
5

Kimenet

Török Gábor · 2005. Jún. 30. (Cs), 10.18
A header() ill. a session függvények előtt nem juthat bármilyen kimenet a klienshez, tehát nem PHP kód nem állhat, hiszen akkor sok értelme nem lenne. Tehát gyakorlatilag a print() és társait nem használhatod addig. (Vagy igen, kimenet pufferolással.)

--
slink
http://20y.hu/
6

Elavult, nem biztonságos

Hodicska Gergely · 2005. Jún. 30. (Cs), 10.20
Szia!


A fent vázolt módszer eléggé elavult, használd inkább a $_SESSION tömböt, plusz nézd meg az említett cikkeket, mert a fenti megoldás biztonság szempontjából hagy neémi kívánnivalót.


Felhő
7

kicsit többet...

Anonymous · 2005. Jún. 30. (Cs), 14.04
oké, a header-t értem.
de a session dologhoz még annyit írhatnátok, hogy a gyakorlatban hogy néz ki a dolog.
1. mondjuk egy belépőoldalon belép az ember. ekkor elindítom a session start-o, session registerrel beregisztrálom a felhasználót.
2. továbblép a következő oldalra de ott mit ellenőrzök? csak azt, hogy van-e munkamenetazonosítója? vagy mi mást?
ez a kérdésem.
8

Ennek az a lényege, hogy

tiny · 2005. Jún. 30. (Cs), 14.19
Ennek az a lényege, hogy nyomon követheted a felhasználót, hogy merre jár. A következő oldalon a felhasználó táblájába (vagy adatbázisába) beírhatod, hogy merre jár éppen az oldaladon, melyik cikkeket nézte meg, mit keresett, egyszóval mindent amit a te oldaladon csinált. És ha ügyes vagy azt, hogy honnan kattintott az oldaladra, milyen böngészőt használ, stb. Tehát egy felhasználó "életét" az oldaladon nyomonkövetheted. Persze amikor kilép, akkor elveszíted, hacsak nem tudsz nála cookie-t beállítani, vagy nem raktál rá egy spyware-t :P. Persze a cookie-val csak a legközelebbi látogatásakor tudod azonosítani. Röviden ennyi :P.
Mr.Tiny
9

még még még...

Anonymous · 2005. Jún. 30. (Cs), 16.14
Köszi Tiny, ezt mintd értem, de maradjunk csak annál az esetnél, ha egyszerűen azt szertném tudni, hogy be van-e lépve egy oldalon az ember...
Például egy fórumot vegyünk, belép az ember, lépked a topic-ok között, akkor mit kell ellenőriznem a session-ökkel? mit vizsgáljak? Belép az első oldalon, akkor a másodikban mit vizsgáljak meg?
10

pölö

tiku I tikaszvince · 2005. Jún. 30. (Cs), 18.46
Egy megoldás:
amikor belépteted, akkor pl. a $_SESSION['status']-nak adsz egy értéket (belepve, logdin, true, stb, vagy az akció időbélyegét). Minden következő laplekérésnél, ellenőrzöd, hogy az előző akcó óta eltelt idő több-e, mint az az idő, amit te az inaktív felhasználóktól eltűrsz. Ha maradhat, akkor frissíted az értékét, az aktuálisra.

Azt már ha jól értem, akkor érted, hogy a $_SESSION, tömböt ugyanúgy tudod használni, mint az általad létrehozott változókat, tömböket. Az a különbség, hogy a futás közben létrehozott változók (bocs ha pontosan nem ez a neve) az oldal lekérése után eltünnek, míg a munkamenetben tároltakat addig elérheted amíg a munkameneted aktív.

De ha nem így van, akkor az okosok javítsanak ki.

TikuVoltam
Ma is holnap fekszünk le, mint tegnap
11

zűrös

Anonymous · 2005. Júl. 1. (P), 01.48
ezzel most jól összezavartál...
12

Mivel?

tiny · 2005. Júl. 1. (P), 18.59
Mondd mit nem értesz, segítünk. Vagy a "ma is holnap fexünk le, mint tegnap" zavart össze? :D
Mr.Tiny
13

mégegyszer...

Anonymous · 2005. Júl. 1. (P), 22.16
a kérdésem változatlanul, az ha valaki bejelentkezik egy oldalra, akkor konkrétan mit tárolok el, hova és a következő lapon hogyan és mit ellenőrzök...
egy tök egyszerű példaprogi megtenné kis magyarázattal...

köszi megint
14

ennyiből remélem

VBala · 2005. Júl. 2. (Szo), 09.48

<?php
session_start();
if(isset($_GET["op"]) && $_GET["op"]=="kilep") {
    unset($_SESSION["belepve"]);  //nincs belépve, úgyhogy töröljük
    header("location: session_demo.php");  //hogy ne legyen gond ha frissitest nyom
}
if(isset($_POST["jelszo"]) && $_POST["jelszo"]=="fityfiritty") {
    $_SESSION["belepve"]=1;  //belépett
    header("location: session_demo.php");  //hogy ne legyen gond ha frissitest nyom
}
if(!isset($_SESSION["belepve"])) {  //nincs belépve? akkor formot neki!
    echo "<form action=\"session_demo.php\" method=\"post\">\n"
        ."pass: <input type=\"password\" name=\"jelszo\">\n"
        ."<input type=\"submit\">\n";
</form>
<?php
}
else {  //ha belépett, lehet mutatni a tartalmat
    echo "de jó, beléptem!<br>"
        ."<a href=\"session_demo.php?op=kilep\">kilépés</a>";
}
?>
ennyiből remélem el tudsz már indulni
16

ez már döfi...

Anonymous · 2005. Júl. 2. (Szo), 22.38
Köszi VBala, ez alapján talán már sikerül elindulnom...
18

kösz

Anonymous · 2005. Júl. 2. (Szo), 22.55
kösz, megnézem, kipróbálom....
15

Szvsz inkább még ne

Dualon · 2005. Júl. 2. (Szo), 09.56
Véletlenül sem bántani szeretnélek, de szerintem addig nem érdemes nekiállni bármit is programozni, amíg ennyire nem vagy tisztában az alapokkal. A PHP nagy erőssége, éspedig könnyű kezelhetősége egyben veszélye is.

A manualt egyébként elolvastad? Még példakódot is ad!
Néhány támpont:
- session_start()
- $_SESSION['altaladbeallitottindex'] ellenőrzése
- ha nincs, beállítod, amire szeretnéd
- ha van, megnézed, megfelelő-e
- a kapott helyzet alapján elvégzed azt, ami miatt az egészre szükséged volt
Próbáld meg megírni a kódrészletet, abból tanulsz igazán. Ha pedig végképp nem megy, akkor nem szabad erőltetni, van más megoldás is.
17

nagyokos?

Anonymous · 2005. Júl. 2. (Szo), 22.47
Dualon,

véletlenül sem akarsz megbántani de gondolom te is tudod, hogy az ilyen kezdetű levelek pont erre jók... mármint, hogy megbántsd az embert...
fogalmam nincs ki vagy és mekkora tudásod van, magamról csak annyit, hogy igaz csak másfél éve, de PHP programozással is foglalkozom, számos referenciám van már az interneten (fórumok, katalógusok, webáruház...) Ezek után mondhatom nem vagyok teljesen kezdő, az említett manuált is sűrűn forgatom sok egyéb könyvvel együtt, és ami miatt ezt a munkamenetes dolgot kérdeztem, az csak azért volt, mert EDDIG a nyomonkövetést másképp oldottam meg (sok felesleges ellenőrzéssel...). De mivel érdekel az is, hogy hogyan lehet jobban csinálni, ezért kérdeztelek benneteket.
Röviden ennyit fűzök írásodhoz és egyébként meg kösz, hogy beírtál valamit, mégha semmire sem volt jó.
19

Biztos nem volt jó?

Hodicska Gergely · 2005. Júl. 3. (V), 14.22
Szia!


Ha követed itt a dolgokat, láthatod, hogy Dualon nem az a beszólogatós fajta. Szóval ne bántódj meg, hanem inkább gondolkodj el azon amit írt. Ráadásul a hozzászólásokra válaszolók nem tudhatják, hogy te mit tudsz, csak azt látják, amit ide beírsz.

Mindezen felül a munkamenetkezelés nagyon egyszerű dolog, rááadásul szerintem is egy PHP programozó esetéban abszolút alap kéne legyen. Ha akárhogy másképp megoldottad, akkor meg simán meg is kéne értened. A kezdő cikkünkben amúgy teljesen részletesen le van írva az egész, annyi önállóság kell, hogy abból meg tudd tanulni.

Ezeknek az alapoknak az ismerete szerintem nélkülözhetetlen ahhoz, hogy komolyabb dolgokat tényleg jól, biztonságosan meg tudj írni.


Felhő
20

Sajnálom, ha rosszul esett

Dualon · 2005. Júl. 3. (V), 19.56
Zsolt!

Sajnálom, ha rosszul esett, amit írtam!
Nem gondoltam, hogy másfél éves PHP-s gyakorlat áll mögötted, ezért soroltam fel a folyamat fontosabb lépéseit ("mégha semmire sem volt jó").
Személy szerint csak legutolsó esetben fordulok a közönséghez, az itt írók közül sokan ugyanis olyan komoly szakértelemről tesznek tanúbizonyságot (napról napra), hogy nem szeretném felesleges dolgokkal rabolni az idejük. Azt hittem, azért nem kapsz (neked megfelelő) választ, mert mások komplexebb kérdésekkel foglalkoznak.
A továbbiakban szvsz ne terheljük ezzel a fórumozókat, ha gondolod, várom leveled a dualon kukac freemail pont hu címre.