PDA

Bekijk Volledige Versie : Code om session ID's te genereren



Johan Wevers
10/12/04, 00:45
Hallo,

Ik ben gevraagd om voor iemand een website die nu alleen uit statische
pagina's bestaat te koppelen met een database. Het systeem draait op
win2000 of XP met Apache 2.0, en de programmatuur wordt geschreven in
Delphi 7.

De bedoeling is om gebruikers zaken te kunnen laten bestellen, en
bestellingen moeten direct in de database doorgevoerd worden.

Ik heb echter geen ervaring met dit soort programmeerwerk. Om bij te
kunnen houden welke gebruiker wat doet moet er ergens een session ID
bijgehouden worden. Voor zover ik weet kan dat met cookies of via
parameters in de URL. Weet iemand voorbeelden van html pagina's en
eventuele Javascripts voor het zetten en uitlezen van cookies en het
doorgeven van parameters daarin naar een executable, danwel code om
een URL die zonder parameters opgeroepen is te heropenen met een
gegenereerd session ID als parameter?

--
ir. J.C.A. Wevers // Physics and science fiction site:
johanw@vulcan.xs4all.nl // http://www.xs4all.nl/~johanw/index.html
PGP/GPG public keys at http://www.xs4all.nl/~johanw/pgpkeys.html

Jeroen Visser [ vizi ]
10/12/04, 01:05
In article <41B8E296.43B3C7C2@xs4all.nl>,
Johan Wevers <johanw@xs4all.nl> wrote:

> De bedoeling is om gebruikers zaken te kunnen laten bestellen, en
> bestellingen moeten direct in de database doorgevoerd worden.
>
> Ik heb echter geen ervaring met dit soort programmeerwerk. Om bij te
> kunnen houden welke gebruiker wat doet moet er ergens een session ID
> bijgehouden worden. Voor zover ik weet kan dat met cookies of via
> parameters in de URL.

Als eerste tip: stel je vraag in het server-side broertje van niwo:
<news:nl.internet.www.server-side>. Daar weten ze meer over dit soort
dingen.

Ik zou het verwerken van sessies in de URL (als GET variabele) ontraden,
omdat dit het vrijwel onmogelijk maakt om pagina's te bookmarken. In de
meeste server-side programmeertalen (.NET, PHP, JSP) kun je prima
cookies zetten en uitlezen, of op basis van een combinatie van
session-id, IP en browser een sessie bijhouden zonder dat er iets bij de
browser hoeft te worden gezet of gewist. (Client-side) Javascript zou ik
hiervoor al helemaal niet gebruiken.

Jeroen Visser

--
vizi fotografie & grafisch ontwerp

I http://www.vizi.nl

Jeroen Visser [ vizi ]
10/12/04, 01:05
In article <j.visser-6C611D.00570110122004@news.wanadoo.nl>,
"Jeroen Visser [ vizi ]" <j.visser@vizi.nl> wrote:

> In article <41B8E296.43B3C7C2@xs4all.nl>,
> Johan Wevers <johanw@xs4all.nl> wrote:
>
> > De bedoeling is om gebruikers zaken te kunnen laten bestellen, en
> > bestellingen moeten direct in de database doorgevoerd worden.
>
> Als eerste tip: stel je vraag in het server-side broertje van niwo:
> <news:nl.internet.www.server-side>. Daar weten ze meer over dit soort
> dingen.

Ai, dat had je al bedacht, zie ik nu pas... Mijn complimenten en excuses!
:-/

Jeroen Visser

--
vizi fotografie & grafisch ontwerp

I http://www.vizi.nl

Eric B. Bednarz
10/12/04, 01:15
Johan Wevers <johanw@xs4all.nl> writes:

> Ik ben gevraagd om voor iemand een website die nu alleen uit statische
> pagina's bestaat te koppelen met een database.

Gefeli.

> Ik heb echter geen ervaring met dit soort programmeerwerk.

Dit aspect zou ik dan uitbesteden aan iemand die dat wel heeft.


--
| ) Più Cabernet,
-( meno Internet.
| ) http://bednarz.nl/

Daniel Tryba
10/12/04, 02:55
In nl.internet.www.server-side Johan Wevers <johanw@xs4all.nl> wrote:

Follow up naar niwss.

> Ik heb echter geen ervaring met dit soort programmeerwerk. Om bij te
> kunnen houden welke gebruiker wat doet moet er ergens een session ID
> bijgehouden worden. Voor zover ik weet kan dat met cookies of via
> parameters in de URL.

Zoals al reeds vermeldt doe je dat niet in de URL, niet alleen vanwege
"bookmarks" maar ook vanwege het lekken van het sessionid via de referer
header.

> Weet iemand voorbeelden van html pagina's en eventuele Javascripts
> voor het zetten en uitlezen van cookies en het doorgeven van
> parameters daarin naar een executable,

Huh? Dat doe je niet in html/javascript maar juist in de exe. Begin eens
met basic CGI:
http://httpd.apache.org/docs/howto/cgi.html#writingacgiprogram
http://httpd.apache.org/docs/howto/cgi.html#whatsgoingonbehindthescenes
en
http://wp.netscape.com/newsref/std/cookie_spec.html

De eerste hit bij google op 'delphi cgi example' levert op
http://tothpaul.free.fr/uscgi.htm (ik neem aan dat je de met een beetje
frans en de code wel een beeld kan vormen over hoe de aanpak dient te
gaan).

> danwel code om een URL die zonder parameters opgeroepen is te
> heropenen met een gegenereerd session ID als parameter?

Dat is gewoon een "flow" probleem:

client> reqeust /foo
server> redirect /login?old=/foo
client> request /login?old=/foo&user=id&password=bar
server> redirect /foo

(waar alle parameters voor natuurlijk netjes urlencoded zijn)

Indien de client geen geldige sessie heeft (moet je dus in je
applicatie bijhouden in bv een file of database), start je een nieuwe
sessie en vraag de gebruiker om zijn credentials, kloppen die in stap 4
dan is er een geldige sessie en anders terug naar 2.

Warden Dave
10/12/04, 03:15
"Daniel Tryba" <spam@tryba.invalid> wrote:
>
[sessie & koekjes etc.]
> Huh? Dat doe je niet in html/javascript maar juist in de exe. Begin eens
> met basic CGI:
> http://httpd.apache.org/docs/howto/cgi.html#writingacgiprogram
> http://httpd.apache.org/docs/howto/cgi.html#whatsgoingonbehindthescenes

Men ziet bijv. ook eens:
http://httpd.apache.org/docs-2.0/mod/mod_usertrack.html

> en http://wp.netscape.com/newsref/std/cookie_spec.html

Ter aanvulling 'mag' er dan ook verwezen worden naar:
http://www.w3.org/Protocols/rfc2109/rfc2109.txt
Versie 2: http://www.zvon.org/tmRFC/RFC2965/Output/

> De eerste hit bij google op 'delphi cgi example' levert op
<knip>

Er zijn inderdaad stapels online voorbeelden te vinden als:
http://delphi.about.com/library/bluc/text/uc060901i.htm etc. etc.

WD

Rene Pijlman
10/12/04, 10:15
Johan Wevers:
>Ik ben gevraagd om voor iemand een website die nu alleen uit statische
>pagina's bestaat te koppelen met een database. Het systeem draait op
>win2000 of XP met Apache 2.0, en de programmatuur wordt geschreven in
>Delphi 7.
>
>De bedoeling is om gebruikers zaken te kunnen laten bestellen, en
>bestellingen moeten direct in de database doorgevoerd worden.
>
>Ik heb echter geen ervaring met dit soort programmeerwerk. Om bij te
>kunnen houden welke gebruiker wat doet moet er ergens een session ID
>bijgehouden worden. Voor zover ik weet kan dat met cookies of via
>parameters in de URL.

De normale en deugdelijke manier is cookies. Dat doe je vanaf de server,
en meestal wordt het verzorgd door het framework van de server-side
webapplicatie die je schrijft. Het genereren van veilige session id's,
expiren en termineren van sessies en bijhouden van een db-connection pool
is namelijk niet helemaal triviaal.

Je zou dus kunnen kijken of Delphi 7 een webapplicatieframework of library
heeft met een sessie- en db-poolingmechanisme. Als dat niet zo is, dan zou
ik een ander programmeergebeuren kiezen.

--
René Pijlman

Wat wil jij leren? http://www.leren.nl