TheClown Skrevet 27. oktober 2007 Del Skrevet 27. oktober 2007 Jeg har et script som skal lagre en del info i cookies, men siden det allerede har vært outputs på siden går det ikke. Jeg kom da opp med en "good" ide. (Dette er et loginscript btw) if ($num2 > 0) // password is correct { $wq = md5($_POST['username']); $_SESSION['username'] = $_POST['username']; echo "<script type='text/javascript'> <!-- window.location = 'http://www.ringerikeungdom.net/link/inc/addcookie.php?wq=$wq' //--> </script>"; } Her tar scriptet md5 på brukernavnet. Brukeren blir så sendt vidre til en side med denne md5 koden under get. <?php $lol = md5($_SESSION['username']); if ($_GET['wq'] !== $lol) { // Shitten var feil! } else { // Shitten var korrekt! } ?> Problemet er bare det at md5-koden er forskjellig. GET koden og $lol = md5($_SESSION['username']); blir ikke lik. Hvorfor blir det slik? Jeg trodde md5 alltid skulle være lik uansett om du kjører det i forskjellige scripts eller ikke. Eller har jeg gjort noe annet feil? - All hjelp mottas med Lenke til kommentar
Rasks Skrevet 27. oktober 2007 Del Skrevet 27. oktober 2007 har du husket session_start(); øverst i scriptet? må si at jeg synes loginscriptet ditt var litt annnerledes enn det jeg er vant til, men jeg skal ikke påstå at jeg er noen ekspert... Lenke til kommentar
TheClown Skrevet 27. oktober 2007 Forfatter Del Skrevet 27. oktober 2007 Det er ca. 1% av hele scriptet. Tror det er på over 200 linjer. Har brukt en del fra et loginscript jeg fant i en bok jeg har. |EDIT| DAMN! NOOBY meg. Hadde faktisk glemt session_start() Lenke til kommentar
Runar0 Skrevet 27. oktober 2007 Del Skrevet 27. oktober 2007 Er det ikkje bare best å plassere ob_start(); helt øverst i scripet, da har du mulighet til å sette cookies overalt. Så slipper du å redirecte. Lenke til kommentar
TheClown Skrevet 27. oktober 2007 Forfatter Del Skrevet 27. oktober 2007 Hva annet gjør denne funksjonen da? Lenke til kommentar
Martin A. Skrevet 28. oktober 2007 Del Skrevet 28. oktober 2007 Den gjør ikke noe annet enn å lagre all output lokalt helt til slutten av scriptet. Da vet PHP at alle malplasserte headere er sendt avgårde, og man trygt kan sende output. Som du så, så brukte jeg ordet 'malplassert'. ob_start() bør være siste utvei, enten fordi du ikke har kunnskap til å finne en fornuftig måte å sende headere og output, eller fordi det rett og slett ikke lar seg gjøre på en annen måte. En måte å sende output riktig på er å faktisk lagre det i en egen variabel. $output .= "heisann\n\r"; $_SESSION['arne'] = 'bjarne']; $output .= "enda mer output\n\r"; header( "HTTP/1.1 200 OK" ); header ("Pragma: no-cache"); $output .= "This is the end!\n\r"; echo $output; echo "Og null feilmeldinger"; Lenke til kommentar
Runar0 Skrevet 28. oktober 2007 Del Skrevet 28. oktober 2007 (endret) Det der kan eg faktisk ikkje si meg enig i. ob_start starter ein buffer som lagrer all output fram til slutten av skriptet eller til du bruker ein av dei andre ob_* fuksjonene. Det er faktisk fleire fordeler ved å bruke ein output buffer: Du kan plassere cookies over heile skriptet All output blir lagret og sent i ein pakke, i steden for at php sender det til brukaren ved kvar print echo, sparer litt tid. Du kan enkelt implantere gzipping av innhaldet ob_start er på langt nær 'siste utvei' Å drive å lagre alt i ein variabel er jo bare tull, det kommer til å bli eit sabla rot ved større appliksjoner. Endret 28. oktober 2007 av Runar0 Lenke til kommentar
PHPdude Skrevet 28. oktober 2007 Del Skrevet 28. oktober 2007 Det der kan eg faktisk ikkje si meg enig i. ob_start starter ein buffer som lagrer all output fram til slutten av skriptet eller til du bruker ein av dei andre ob_* fuksjonene. Det er faktisk fleire fordeler ved å bruke ein output buffer:"Siste utvei" var kanskje å ta litt hardt i, men den bør heller ikke brukes som den enkle veien rundt sine egne struktureringsfeil.Du kan plassere cookies over heile skriptetCookies har vel ikke større bruksområder enn at man enkelt bør kunne unngå et behov for å kunne sette de over hele skriptet All output blir lagret og sent i ein pakke, i steden for at php sender det til brukaren ved kvar print echo, sparer litt tid.Output blir ikke sendt til brukeren ved hver echo. Du kan enkelt implantere gzipping av innhaldet Det er like enkelt selv om man har strukturert koden så alle headere kommer først. Å drive å lagre alt i ein variabel er jo bare tull, det kommer til å bli eit sabla rot ved større appliksjoner. En annen interessant mulighet er å bruke XMLWriter som byr på mange fordeler. F.eks en gyldig XML "garanti", beskyttelse mot XSS-angrep og praktiske struktureringsmuligheter i større prosjekter. Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå