Avatar billede googolplex Novice
19. oktober 2004 - 20:02 Der er 25 kommentarer og
2 løsninger

$_SESSION og html

Jeg bruger session og det fungerer fint...lige indtil jeg indsætter denne html-linie i <head>:

<link rel="stylesheet" type="text/css" href="" />

Så virker mine sessions ikke mere, hvad sker der, jeg er totalt forvirret :|-)
Avatar billede hmortensen Nybegynder
19. oktober 2004 - 20:06 #1
Ehhh, kan du ikke smide noget mere kode ?
Avatar billede Slettet bruger
19. oktober 2004 - 20:06 #2
prøv at flytte din session_start() op som det første i dokumentet..
Avatar billede hmortensen Nybegynder
19. oktober 2004 - 20:07 #3
Må man gå ud fra han har, ellers vil han få fejl om output før header()
Avatar billede googolplex Novice
19. oktober 2004 - 20:29 #4
Jep, jeg har prøvet alt mht. headers() osv. Det er den linie der ødelægger det hele...

Min kode er her. I kan prøve at fjerne <!-- -->, så funker skidtet ikke mere :(:

<?php ob_start(); ?>

<head>
<title>Anti cheat Posting</title>

<!-- <link rel="stylesheet" type="text/css" href="" /> -->

</head>
<body>

<?php
session_start();

echo '<p>POST: ' . $_POST['token'] . '</p>';
echo '<p>SESSION: ' . $_SESSION['token'] . '</p>';
echo '<p>token: ' . $token . '</p>';

if (isset($_POST['message']))
{
    if ($_POST['token'] == $_SESSION['token'])
    {
        $message = htmlentities($_POST['messsage']);
       
        $fp = fopen('./messages.txt', 'a');
        fwrite($fp, "$message<br />");
        fclose($fp);
    }
}

$token = md5(uniqid(mt_rand(), true));
$_SESSION['token'] = $token;

echo '<p>POST-TO: ' . $_POST['token'] . '</p>';
echo '<p>SESSION-TO: ' . $_SESSION['token'] . '</p>';
echo '<p>token-TO: ' . $token . '</p>';

?>

<form method="post">
<input type="hidden" name="token" value="<?php echo $token; ?>" />
<input type="text" name="message" /><br />
<input type="submit" />
</form>

<?php readfile('./messages.txt'); ?>

</body>
</html>

<?php ob_end_flush(); ?>
Avatar billede hmortensen Nybegynder
19. oktober 2004 - 20:31 #5
<?php
session_start();
?>
<head>
<title>Anti cheat Posting</title>
<link rel="stylesheet" type="text/css" href="" />
</head>
<body>

<?php

echo '<p>POST: ' . $_POST['token'] . '</p>';
echo '<p>SESSION: ' . $_SESSION['token'] . '</p>';
echo '<p>token: ' . $token . '</p>';

if (isset($_POST['message']))
{
    if ($_POST['token'] == $_SESSION['token'])
    {
        $message = htmlentities($_POST['messsage']);
       
        $fp = fopen('./messages.txt', 'a');
        fwrite($fp, "$message<br />");
        fclose($fp);
    }
}

$token = md5(uniqid(mt_rand(), true));
$_SESSION['token'] = $token;

echo '<p>POST-TO: ' . $_POST['token'] . '</p>';
echo '<p>SESSION-TO: ' . $_SESSION['token'] . '</p>';
echo '<p>token-TO: ' . $token . '</p>';

?>

<form method="post">
<input type="hidden" name="token" value="<?php echo $token; ?>" />
<input type="text" name="message" /><br />
<input type="submit" />
</form>

<?php readfile('./messages.txt'); ?>

</body>
</html>
Avatar billede googolplex Novice
19. oktober 2004 - 20:39 #6
Det var også det første jeg prøvede, det hjælper intet.
Avatar billede hmortensen Nybegynder
19. oktober 2004 - 20:42 #7
Får du nogle fejl ?
Avatar billede googolplex Novice
19. oktober 2004 - 21:01 #8
Nej, men systemet virker ikke!

Den 'token' der bliver genereret her:

$token = md5(uniqid(mt_rand(), true));
$_SESSION['token'] = $token;

Er ikke længere den samme her, når siden læses ind igen:

echo '<p>SESSION: ' . $_SESSION['token'] . '</p>';

Du kan selv prøve efter, det er derfor jeg skriver dem ud :)
Avatar billede googolplex Novice
19. oktober 2004 - 21:01 #9
echo '<p>POST: ' . $_POST['token'] . '</p>';
echo '<p>SESSION: ' . $_SESSION['token'] . '</p>';

De to skal være ens!
Avatar billede googolplex Novice
19. oktober 2004 - 22:36 #10
Ingen bud ? Det er simpelthen den underligste fejl jeg længe har set...
Avatar billede Slettet bruger
19. oktober 2004 - 22:39 #11
Ikke fordi jeg overhoved kan forklare hvorfor det skulle have noget med det at gør, men sker der det samme hvis du sætter en værdi til href i dit link til stylesheetet?
Avatar billede googolplex Novice
19. oktober 2004 - 23:40 #12
Det overvejede jeg at prøve, har bare ikke lige fået taget mig sammen :P

Mit gæt er at det løser problemet...
Avatar billede googolplex Novice
21. oktober 2004 - 08:20 #13
Nå, læg nogle svar :-)
Avatar billede hmortensen Nybegynder
21. oktober 2004 - 08:29 #14
Fik du det til at virke ?
Avatar billede googolplex Novice
21. oktober 2004 - 14:40 #15
Ja, jeg skal bare fjerne linien :)

Jeg fatter bare ikke HVORFOR !? Det er da ulogisk at et html-link kan have inflydelse på om sessions virker...

Hvis nogen undrer sig over dette:

$token = md5(uniqid(mt_rand(), true));
$_SESSION['token'] = $token;

Det er en lille sikring, der tester om $_POST er modtaget fra den korrekte formular og ikke sendt som request fra et eksternt sted (det er som regel ikke positivt...)

Svar udbedes :)
Avatar billede Slettet bruger
21. oktober 2004 - 17:09 #16
.
Avatar billede hmortensen Nybegynder
21. oktober 2004 - 17:27 #17
Jeg ved ikke hvad du gør forkert, men det virker fint her
Avatar billede googolplex Novice
21. oktober 2004 - 17:31 #18
hmortensen: Hvad mener du med, at det virker fint her ?
Avatar billede hmortensen Nybegynder
21. oktober 2004 - 18:43 #19
Prøv at se her:
http://test.no-mercy.dk/2.php

Er det ikke sådan det skal virke ?
Avatar billede googolplex Novice
21. oktober 2004 - 19:04 #20
Nej, du har præcis samme fejl som jeg:

POST: 9b120ef91161cab5e695e843faed2785

SESSION: 1c3ef58855a6aa5e7cb9572d7debdccb

De to skal være ens. Kan du prøve at fjerne linien ?
Avatar billede googolplex Novice
21. oktober 2004 - 19:05 #21
Altså denne:

<link rel="stylesheet" type="text/css" href=""
Avatar billede hmortensen Nybegynder
21. oktober 2004 - 20:27 #22
Jeg får samme resultat både med og uden den:

POST: 61e2ebba51802ec15a1e8a6e5d5ecdcf

SESSION: 61e2ebba51802ec15a1e8a6e5d5ecdcf

token: 61e2ebba51802ec15a1e8a6e5d5ecdcf

POST-TO: 61e2ebba51802ec15a1e8a6e5d5ecdcf

SESSION-TO: 843590675d5077568477bc99da766086

token-TO: 843590675d5077568477bc99da766086

Hvis jeg trykker F5, og sender samme data igen:

POST: 61e2ebba51802ec15a1e8a6e5d5ecdcf

SESSION: 843590675d5077568477bc99da766086

token: 843590675d5077568477bc99da766086

POST-TO: 61e2ebba51802ec15a1e8a6e5d5ecdcf

SESSION-TO: abef64b0f14910dd37af9b996f8e4b39

token-TO: abef64b0f14910dd37af9b996f8e4b39

Med css:
http://test.no-mercy.dk/2.php

Uden css:
http://test.no-mercy.dk/3.php
Avatar billede googolplex Novice
21. oktober 2004 - 20:29 #23
Det gør jeg ikke, så må det være min computer eller noget. Weird.
Avatar billede googolplex Novice
21. oktober 2004 - 20:30 #24
Så fandt jeg fejlen - Firefox!!!
Avatar billede hmortensen Nybegynder
21. oktober 2004 - 20:30 #25
Må det næsten være. Måske et cookie problem...
Avatar billede googolplex Novice
21. oktober 2004 - 20:44 #26
Ja, men det er sådan set ligegyldigt, for nu ved jeg hvorfor fejlen kommer, og det virker jo fint ;)

Dumb et svar :)
Avatar billede hmortensen Nybegynder
21. oktober 2004 - 20:49 #27
Oki :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester