|
|
Internetes naptár készítése Delphi-vel
Naptár 8. rész
|
|
Példaprogram letöltése
16275 bájt
|
Cikksorozatunk befejező részében megvalósítjuk a jelszó kezelését, így a naptárba új bejegyzést felvenni, meglévőt törölni, illetve a nem publikus bejegyzéseket megtekinteni csak a naptár tulajdonosának lesz joga.
A mellékelt példa kipróbálása előtt az alábbi teendők szükségesek:
- A sorozat első részében mellékelt adatbázisok alkönyvtárára létre kell hozni egy BDE alias-t, ASWEBCALENDAR névvel.
- A Main.pas-ban található HTMDIR konstansnál adja meg azt az elérési útvonalat, ahová a mellékelt példa HTM alkönyvtárát helyezte.
- Ezek után fordítsa le a programot (Project - Build).
- A létrejött EXE-t másolja át web szerverének azon könyvtárába, ahonnan van joga futtatni internetes alkalmazásokat (Pl.: C:\InetPub\Scripts\)
- Indítson el egy böngészőt és írja be a következő címet: http://szervernev/scripts/webcalendar08.exe, persze a szervernev mindenkinél más és más lehet.
A jelszó kezelést nagy mértékben leegyszerűsítjük: egyszerűen beépítünk a programba egy sztringet, mely a jelszó lesz. Ha a felhasználó ezt adja meg, akkor elfogadjuk a bejelentkezést, ha nem, akkor elutasítjuk. Felhasználói névre és több jelszó kezelésére a feladatnál fogva nincs szükség, mivel a naptárnak csak egy tulajdonosa lehet, aki felvehet új bejegyzést, törölhet. Mindenki más csak megtekintheti a publikus bejegyzéseket.
A bejelentkezés után viszont minden egyes link esetében jeleznünk kell, hogy a felhasználó már azonosította magát. Erre azért van szükség, mert különben a programunk nem tudná, hogy történt-e már bejegyzés vagy sem.
Ezt ismét egy egyszerűsítéssel oldjuk meg: ha egy linkben szerepel a data paraméter és ennek értéke pl8, akkor úgy vesszük, hogy a felhasználó bejelentkezett. Mind a data, mind a pl8 egy véletlenszerűen választott elnevezés, használhatnánk bármit.
Ha tehát http://szervernev/scripts/webcalendar08.exe kerül beírásra egy böngészőbe, akkor a felhasználó nincs bejelentkezve. Ha viszont http://szervernev/scripts/webcalendar08.exe/data=pl8, akkor a felhasználó bejelentkezett.
Nyilvánvaló, hogy fenti sort a jelszó ismerete nélkül is begépelheti bárki és így teljes hozzáférése lesz a naptárhoz. Vegyük figyelembe viszont, hogy a data=pl8 kódot csak a programozó ismeri, aki készíti az alkalmazást. A http://szervernev/scripts/webcalendar08.exe/data=pl8 sort csak az láthatja, aki a naptár tulajdonosa, vagyis aki a jelszóval érvényesen bejelentkezett. Ebből következik viszont, hogy jogosulatlan felhasználó nem férhet hozzá a naptárhoz a jelszó vagy a data=pl8 kód ismerete nélkül, tehát minimális ráfordítással védhetővé tettük a naptárat.
Nézzük most a megvalósítást.
Ki kell egészítenünk a web lapot egy kis bejelentkezési ablakkal, ahová a jelszó beírható. További teendő, hogy elrejtsük a naptárba való új bejegyzés web Form-ját mindaddig, amíg nem történt meg a bejelentkezés. Így egyszerűen meggátoljuk, hogy jogosultság nélkül új bejegyzés kerüljön a naptárba.
A login.htm tartalmazza a bejelentkezéshez szükséges web Form HTML kódját. Ha a bejelentkezés megtörtént, akkor viszont erre az ablakra már nincs szükségünk, helyette viszont illendő kijelezni, hogy bejelentkezés sikeres. Ennek kódja a logged.htm-ben kapott helyet.
A main.htm-be elhelyeztünk egy <#login> címkét. Attól függően, hogy bejelentkezett-e a felhasználó vagy sem, ezt a címkét a login.htm tartalmára, illetve a logged.htm tartalmára cseréljük le.
Mivel el kell rejtenünk az új bejegyzés web Form-ját is, így ennek kódja a main.htm-ből átkerült egy újonnan létrehozott append.htm-be. A main.htm-be pedig egy <#append> címke került ennek a helyére. Ezt a címkét szintén a bejelentkezéstől függően vagy kicseréljük az append.htm tartalmára vagy egyszerűen nem cseréljük ki semmire és így bejelentkezés nélkül meg sem jelenik az új bejegyzés ablaka.
A login.htm-ben lévő web Form-hoz a login nevű akciót rendeltük, így ezt kell majdan a programunkban is létrehozni. Amikor tehát a felhasználó beírja a jelszót és azt elküldi a szervernek, akkor fut le a login akció OnAction eseménye.
Itt kell ellenőriznünk, hogy a beírt jelszó megfelel-e. A beírt jelszót a Request.QueryFields. Values['pass'] property-ből olvashatjuk ki. A jelszót mi a dso sztringre választottuk meg, de ez persze tetszőleges lehet. Ha tehát a mellékelt példa bejelentkezési ablakába jelszónak a dso sztringet adjuk meg, akkor a bejelentkezés sikeres lesz. Ha más sztring kerül beírásra, akkor egy rövid hibaüzenetet küldünk vissza a felhasználónak.
Ha a jelszó helyes, akkor visszaugrunk a kezdő weblapra a már ismertetett Response.SendRedirect eljárással, de most paraméterként megadjuk a data=pl8 kódot is.
procedure TWebModule1.WebModule1WebActionItem4Action
(Sender: TObject; Request: TWebRequest;
Response: TWebResponse; var Handled: Boolean);
begin
with Request.QueryFields do begin
FLogged:=Values['pass']='dso';
end;
if FLogged then begin
Response.SendRedirect(Request.ScriptName+'?data=pl8');
end else begin
Response.Content:='Hibás a jelszó!';
end;
end;
A programunkat még módosítanunk kell minden olyan helyen, ahol link előállítása történik. Szükséges ezt azért megtennünk, hogy ha egy kérés kiszolgálásakor már adott a data paramétert a pl8 értékkel, akkor ezt minden egyes linkbe el kell hogy helyezzük. Ha ezt nem tennénk, akkor megszűnne a bejelentkezési státusz.
Ennek érdekében létrehozunk egy globális logikai változót FLogged néven, melynek minden akció elején értéket adunk a következő módon:
…
FLogged:=Request.QueryFields.Values['data']='pl8';
…
Vagyis az FLogged igaz lesz, ha paraméterként megkaptuk a data=pl8-at. A későbbiek folyamán az FLogged vizsgálatával már tetszőlegesen elágaztathatjuk a programunkat az adott helyzetnek megfelelően.
Link található még a web lapon is a dátumra való ugrásnál. Így itt módosítjuk a main.htm kódját elhelyezve benne egy rejtett mezőt ami data névre hallgat. Értékét programból kapja a <#querylog> címke cseréjével. Ha bejelentkezett a felhasználó, akkor csak annyi a teendőnk, hogy a pl8 értékre cseréljük ki a címkét.
…
if TagString='querylog' then begin
if FLogged then begin
ReplaceText:='pl8';
end;
end;
…
Az Ugrás a mai napra link esetében a <#nowdate> címke kerül cserélésre. Itt most csak ki kell egészítenünk a forráskódban már meglévő kódot, hogy ha a bejelentkezés megtörténik, akkor a data=pl8 paraméter is a linkhez kerüljön.
…
if TagString='nowdate' then begin
DecodeDate(Now, year, month, day);
ReplaceText:='year='+IntToStr(year)+'&month='
+IntToStr(month)+'&day='+IntToStr(day);
if FLogged then begin
ReplaceText:=ReplaceText+'&data=pl8';
end;
end else begin
…
|
Könyv
Ez a cikk megtalálható ebben a könyvben:
Delphi Software Offline 2000 évkönyv 529. oldal
Felhasználási feltételek
A Software Online szoftverfejlesztői magazin mindegyik cikke, minden megjelent képe, és egyéb publikált anyaga szerzői jog védelme alatt áll! Bármilyen formában történő másodlagos terjesztésük, közzétételük vagy felhasználásuk kizárólag a kiadó előzetes írásbeli engedélyével történhet!
|