Gå til innhold

Problemer med md5


Anbefalte innlegg

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 :love:

Lenke til kommentar
Videoannonse
Annonse

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

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 av Runar0
Lenke til kommentar
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 skriptet
Cookies 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

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...