Gå til innhold

Session


Anbefalte innlegg

Warning: Cannot send session cache limiter - headers already sent (output started at /mnt/home4/e/ec/ecards/public_html/index.php:10) in /mnt/home4/e/ec/ecards/public_html/meny.php on line 9

 

får denne feil melding.

 

Linje 9 i meny.php

 

session_start();

if(!isset($username)) {

 

Alle filene som er i katalogen include vises ikke.

Lenke til kommentar
Videoannonse
Annonse

Problemet er at "headers already sent ". Er det noen form for output i scriptet før du starter en session, genererer serveren automatisk en html header, slik at browseren vet hva den skal vise.

 

Pass på at det ikke er noen mellomrom eller andre output før headeren settes. Bruk eventuelle @ for å fjerne warnings og notic.

Lenke til kommentar
Problemet er at "headers already sent ". Er det noen form for output i scriptet før du starter en session, genererer serveren automatisk en html header, slik at browseren vet hva den skal vise.

 

Pass på at det ikke er noen mellomrom eller andre output før headeren settes. Bruk eventuelle @ for å fjerne warnings og notic.

Hei takk for at du tok tid for å svare meg.

Jeg greide å løse dette problemet men fikk en annen problem.

 

 

echo " <?
$sjekk_side = isset($side);
if ($sjekk_side == 1)
{ 
if (@fopen('include/$side.php', 'r'))
{ 
include ('include/$side.php'); 
}
if (!(@fopen('include/$side.php', 'r')))
{
include('include/404.php');
}
}
if ($sjekk_side <> 1)
{ include('include/index.php'); 
}
?>";

Jeg får feil mld Hvis jeg bruker " disse mens hvis jeg bruker ' så virker ikke include scriptet.

 

Har du noen tips på¨hva jeg kan gjøre.

}

?>";

Endret av jic
Lenke til kommentar

Er utrolig viktig å gi oss selve feilmeldingen, det kan være alt fra "file not found" til parse error. Kunne også vært kjekt med kodesnutten fra noen linjer før/etter og selve linja som feiler. Først da har vi noe å gå på.

 

Hvis du tar en titt på første linje på koden du nettopp ga oss nå, hvorfor har du den koden inni en echo blokk?

 

Vil også kommentere måten du includer filer på. Den er ikke akuratt gjennomførbar hvis du vil gjøre siden noe mer secure. Hvis jeg sier index.php?side=../config og du f.eks har en config.php i det området og har f.eks lagret brukernavn/passord til databasen der.. så er den metoden veldig usikker. Du bør sjekke i det minste at realpath'en e.l. er innenfor det området du vil at filer skal includes fra. Eventuelt sjekke om $side ikke inneholder masse ../ foran, ja den kan sikkert oppstå flere enn en gang, så du må eventuelt filtrere vekk alle ../ som oppstår.

Lenke til kommentar
hvorfor skriver du ut php kode med echo???

Hmm jeg lastet ned en ferdig login script.

Her er koden for scriptet

<?php

include("config.php");

$connect = mysql_connect("$user_hostname", "$user_username", "$user_password");
mysql_select_db("$user_database", $connect);

session_start();

if(!isset($username)) {

[COLOR=red]echo "<form method=\"POST\" action=$PHP_SELF>
<center>
<table>
<tr>
<td>Username:</td>
<td><input type=\"text\" name=\"username\" size=\"20\"></td>
</tr>
<tr>
<td>Password:</td>
<td><input type=\"password\" name=\"password\" size=\"20\"></td>
</tr>
<tr>
<td colspan=\"2\">
<p align=\"center\"><input type=\"submit\" value=\"Submit\" name=\"submit\"></td>
</tr>
</table>
</center>
</form>";
exit;[/COLOR]}[/color]session_register("username");
session_register("password");
$sql = "SELECT * FROM users WHERE username = \"$username\" AND password = \"$password\"";
$result = @mysql_query($sql) or die("No.");
if(mysql_num_rows($result) == "0") {
session_unregister("username");
session_unregister("password");
echo "<h2 align=center>Wrong username and password, try again</h2>";
exit;
}
$username = mysql_result($result,0,"username");
mysql_close($connect);
?>

Endret av jic
Lenke til kommentar
Er utrolig viktig å gi oss selve feilmeldingen, det kan være alt fra "file not found" til parse error. Kunne også vært kjekt med kodesnutten fra noen linjer før/etter og selve linja som feiler. Først da har vi noe å gå på.

 

Hvis du tar en titt på første linje på koden du nettopp ga oss nå, hvorfor har du den koden inni en echo blokk?

 

Vil også kommentere måten du includer filer på. Den er ikke akuratt gjennomførbar hvis du vil gjøre siden noe mer secure. Hvis jeg sier index.php?side=../config og du f.eks har en config.php i det området og har f.eks lagret brukernavn/passord til databasen der.. så er den metoden veldig usikker. Du bør sjekke i det minste at realpath'en e.l. er innenfor det området du vil at filer skal includes fra. Eventuelt sjekke om $side ikke inneholder masse ../ foran, ja den kan sikkert oppstå flere enn en gang, så du må eventuelt filtrere vekk alle ../ som oppstår.

Har du noen enklere include script????

 

En annen ting fins det noen login script m/Mysql hvor det ikke er session :( får ikke ting til å fungere med den.

Lenke til kommentar

Hei,

sessions er gankse vanlig og nyttig når du utvikler bruker php - så du burde bruke litt tid på å lære det da det vil gjøre hverdagen lettere!

I nyeste utgaven av PHP magacine finner du en bra artikkel om sessions. Denne utgaven finner du også GRATIS på hjemmesidene deres, da det er første gagnen de publiserer bladet elektronisk!

 

Ta en kikk på www.php-mag.net

Lenke til kommentar

Sessions funker flott, hvis man har riktig versjon av PHP ;) ISP'en som leverer webhotellet for en nettside jeg utvikler, har desverre PHP 4.1.2 fortsatt på serveren. Om de noen sinne har planer om å oppgradere er en annen sak.

 

Poenget var, har du siste versjon av PHP, så "tror" jeg du skal være fri for bugs på det feltet. Hvis du er også en uheldig person som har et webhotell med ikke så ny PHP innstallert, så kan det hende du vil oppleve problemer.

 

Et tips når det gjelder forholdet logikk og output. Jeg foretrekker å ha håndtering / logikk / bearbeiding av data, som f.eks valg av side, login, logout, oppdatering av database, tukling med session data, validering av parametere som kommer via GET, POST osv helt først.

 

Rekkefølge hvordan kodeflyt kan være:

- logikk

- output av html

 

På den måten slipper du å tenke på session_start skaper krøll. Samme vil gjelde hvis du engang skulle bruke header() til f.eks redirect eller sette content-type.

 

Og du trenger bare bruke session_start en gang. Den kunne egentlig egnet seg inni config.php fila di.

 

Når det gjelder den koden du postet nå sist så kunne jeg ikke se noe galt (kanskje det er noe galt :D er bare litt sent på natta nå).

 

Eneste jeg la merke til var bruken av $PHP_SELF, du har vel register_globals = on?

Dette er ikke på som default i de siste utgivelsene av PHP.

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å
×
×
  • Opprett ny...