Avatar billede webcreator Nybegynder
13. juli 2004 - 11:20 Der er 15 kommentarer og
2 løsninger

Header already sent - brug af meta-tag i stedet (refresh)

Hej Eksperter.

Jeg har opbygget mit website i en tabelstruktur der gør, at nye sider inkluderes - som i et frameset. Jeg blev træt af en masse kode i alle mine dokumenter, når jeg kunne have det hele i index.php.

Sagen er nu, at det er noget svære at bruge header(), da der jo allerede er blevet sendt data fra index.php. Derfor benytter jeg i øjeblikket <meta http-equiv=\"refresh\" content=\"0;url=url.php\">, til at sende data. Det er dog sjældent jeg har brug for funktionen. Jeg benytter den ved :

- Login med cookies
- Tjek om login er korrekt (hvis ikke refreshes brugeren til logout.php)

Jeg forventer ikke at få brug for funktionen andre steder.

Mit spørgsmål er nu, om der er nogen problemer i brugen af denne metode? Jeg er klar over, at brugerens login sendes via GET, men det er næppe et sikkerhedsproblem, da passwordet er MD5 krypteret. Samtidig kan enhver alligevel se det i en cookie (med mindre man ikke bruger autologin naturligvis - så er det bare et par sessions der bliver lavet).

Kunne man forestille sig, at der var browsere som ikke tillod brug af disse meta-tags? For hvis det er tilfældet, vil systemet naturligvis ikke virke for dem.
Avatar billede jaw Nybegynder
13. juli 2004 - 11:28 #1
Tror faktisk, at du evt. kan få headers til at lykkes, ved at sætte: ob_start(); i toppen af din index.php.
Avatar billede jaw Nybegynder
13. juli 2004 - 11:34 #2
Du får lige den her med: http://dk.php.net/ob_start
Avatar billede webcreator Nybegynder
13. juli 2004 - 11:40 #3
Hej igen, Jaw.
Tak skal du have - jeg ser på det snarest. Skal lige på arbejde.

I mellemtiden kunne jeg stadig godt tænke mig svar på, om løsningen med Meta-Tags er et problem.
Avatar billede erikjacobsen Ekspert
13. juli 2004 - 11:52 #4
I mange browsere kan man slå fra at <meta ... refresh...> virker. Det er der
nok ikke så mange der gør.

Men jeg vil da anbefale dig at omstrukturere din kode i stedet for. Hvis du har
behov for at lave en redirect, kan du jo bare starte med at lave de
nødvendige tests, og vente med HTML-en til senere.
Avatar billede googolplex Novice
13. juli 2004 - 13:08 #5
Jeg bruger altid outout buffering som jaw nævnte, det kan desuden mange andre smarte ting i forbindelse med caching af dine sider, fejlhåndtering mv.

----------

dinfil.php

<?php

ob_start();

echo 'Hej hej';
header();

ob_end_flush();

?>
Avatar billede webcreator Nybegynder
13. juli 2004 - 14:19 #6
Erik > Jeg kan desværre ikke lave div. tests først, da mit website som sagt er bygget op som en form for frameset. Noget i retning af :

<html>
<body>

<?php

$page = $_GET["page"];

include("menu.php");
include("$page");

?>

</body>
</html>

Jeg behøver vel ikke sige, at ovenstående er en meget simpel model af det jeg har lavet, vel? :)

Det er helt sikkert, at min metode har nogle ulemper. Men der er bestemt også fordele ved denne struktur - fx. kan jeg meget nemt ændre hele designet på siden, da det meste ligger i index.php. Samtidig er koden i de sider, som inkluderes, fri for kode som ikke har noget med de egentlige funktioner at gøre.

Mht. ob_start(), så vil jeg da lige kigge på den. Men er der noget jeg bør vide om denne funktion? Kunne jeg i realiteten lave noget a lá :

<html>
<body>

$page = $_GET["page"];

include("menu.php");
include("$page");

</body>
</html>
Avatar billede webcreator Nybegynder
13. juli 2004 - 14:20 #7
Ups, mindre fejl der til sidst. Jeg skriver det lige om..

Mht. ob_start(), så vil jeg da lige kigge på den. Men er der noget jeg bør vide om denne funktion? Kunne jeg i realiteten lave noget a lá :

<html>
<body>

<?php

ob_start();

$page = $_GET["page"];

include("menu.php");
include("$page");

ob_end_flush();

?>

</body>
</html>

Ville ovenstående fungere som hvis jeg ikke havde sendt noget ud til browseren til at starte med?
Avatar billede webcreator Nybegynder
13. juli 2004 - 14:23 #8
Sådan - har afsat et par points mere
Avatar billede jaw Nybegynder
13. juli 2004 - 14:41 #9
Det ville jeg mene du godt kan ja... Og så bare dine headers/setcookies et sted mellem ob_start() og ob_end_slush()
Avatar billede erikjacobsen Ekspert
13. juli 2004 - 15:10 #10
jo, webcreator, det kan du sagtens - altså bytte om på rækkefølgen, så du laver
beregninger etc først, og så viser HTML-en til sidst, hvis der altså ikke har
være en redirection.
Avatar billede webcreator Nybegynder
13. juli 2004 - 17:31 #11
Perfekt, det virkede faktisk med ob_Start() i toppen, og ob_end_slush() til sidst i mit dokument. Nu er jeg meget glad ;)

Tak for hjælpen, gutter.

Kunne I ikke smide en stak svar? Så får I alle lidt, mens Jaw løber med lidt ekstra for løsningen :)
Avatar billede jaw Nybegynder
13. juli 2004 - 17:44 #12
Jeg kan i hvert fald :) Og selv tak :)
Avatar billede googolplex Novice
13. juli 2004 - 18:47 #13
Ok :)
Avatar billede webcreator Nybegynder
13. juli 2004 - 18:49 #14
Erik ? :)
Avatar billede erikjacobsen Ekspert
13. juli 2004 - 18:49 #15
Nej tak. Du ville jo ikke lytte til fornuft --- ok, ok, dårlig vittighed ;)
Avatar billede webcreator Nybegynder
13. juli 2004 - 18:51 #16
Hehe, bare i orden Erik :-)
Avatar billede jaw Nybegynder
13. juli 2004 - 18:51 #17
:)
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