Gå til innhold

Nytt session problem...


Anbefalte innlegg

Nå forstår jeg fint lite her...

Har prøvd å lage til et innloggings-script på siden min. Når jeg bruker session_start() i login-scriptet får jeg denne feilmeldingen...

 

Warning: session_start(): Cannot send session cookie - headers already sent by (output started at c:\appserv\www\acdc\index.php:7) in c:\appserv\www\acdc\include\login.php on line 2

 

Warning: session_start(): Cannot send session cache limiter - headers already sent (output started at c:\appserv\www\acdc\index.php:7) in c:\appserv\www\acdc\include\login.php on line 2

 

Og jeg blir innlogget. Men når jeg fjerner session_start() forsvinner feilmeldingen, men jeg blir også logget inn ?!? Synes dette virker ganske merkelig...

 

Linje 7 i index.php er "<?php"...

 

Her er login-scriptet mitt. Vet det ikke er veldig sikkert enda, men det kommer med tiden. Foreløbig vil jeg bare at det skal virke...

 

<?php
session_start();
$user = 'pangaea';
$pass = 'pangaea';

if (($_POST['username'] == $user) && ($_POST['password'] == $pass))
{
 $_SESSION['loggedin'] = "true";
 echo "You are logged in. <br>";
 exit;
}
else
{
 $_SESSION['loggedin'] = "false";
 echo "You are not logged in. <br>";
}
?>

 

Jeg blir logget inn enten jeg bruker session_start() eller ikke. Jeg bruker ?page=login om det har noe å si, men bruker ikke session_start() på index.php

 

Har det noe med php.ini å gjør??

Endret av Pangaea
Lenke til kommentar
Videoannonse
Annonse


<?php
session_start();
?>

 

Det er feil måte å gjøre det på.

 

<?php
session_start();
?>

 

Det er rett måte å gjøre det på.

 

Om du ikke skjønte den så vil det bare si at ingen ting må sendes til browseren før session startes. PHP echo/print output, html kode, tomme linjer med html. Hva som helst. session_start(); skal være det ABSOLUTT første som kommer i koden, med tanke på output.

 

Edit: Ser at kode funksjonen på forumet her automatisk legger til en tom linje øverst, ,så det ble en dårlig illustrasjon. Beklager.

Endret av Findus
Lenke til kommentar

La nå inn session_start() i index.php helt øverst, og fjernet det i login.php, og da funket det :thumbup:

 

Og jeg forstod eksempelet ditt bare jeg fikk tenke noen sekunder... :D

 

Problemet var at siden jeg inkluderte login-scriptet ble session_start() plassert et stykke ned på siden...

 

Takker for nok et løst problem :)

Lenke til kommentar

Huff, nok et problem jeg ikke finner ut av :(

 

Sånn ser menu.inc.php ut...

<strong>Menu:</strong><br/>
<a href="index.php?page=home">Home</a><br/>
<a href="index.php?page=news">News</a><br/>
<a href="index.php?page=news_add">Add News</a><br/>
<a href="index.php?page=form_id">Form</a><br/>
<a href="index.php?page=form">Add Member</a><br/><br/>

<a href="../forum/index.php">AC/DC Info Forum</a><br/><br/>


<?php
if ($_SESSION['loggedin'] == "false")
{
?>
<form name="login" method="post" action="index.php?page=login">
 HTML.....
</form>
<?php
}
else
{
echo "<a href=index.php?page=logout>Log Out</a>";
}

?>

 

Meningen er at når bruker er logget inn skal menyen forandre seg (fra login skjema til logout link). Men det gjør den ikke før jeg klikker på en av linkene. Hvorfor forandrer den seg ikke med en gang?

 

Sorry for å spør så mye, men er uerfaren enda, og ser ikke hvorfor det ikke vil virke...

Lenke til kommentar

Jeg har session_start() i index-filen, og includerer menu.inc.php

 

Edit: slenger på koden min, kanskje dere finner ut av det :)

 

index.php

<?php
session_start();
?>

<html>
<head>
<title>Test Page:</title>
<link rel="stylesheet" href="./include/styles.inc.css" type="text/css"/>
</head>
<body>
<?php

if (isset($_GET['page']))
{
$page = $_GET['page'].".php";
if (is_file("./".$page))
{
 $page_inc = "./".$page;
}
else
{
 $page_inc = "./home.php";
}
}
else
{
$page_inc = "./home.php";
}
?>

<table width="990" border="1" cellpadding="0" cellspacing="0">
<tr>
 <td colspan="2"><?php include ("./include/header.inc.php");?></td>
</tr>
<tr>
 <td width="150" valign="top"><?php include ("./include/menu.inc.php");?></td>
 <td width="840" valign="top"><?php include ($page_inc);?></td>
</tr>
<tr>
 <td colspan="2"><?php include ("./include/footer.inc.php");?></td>
</tr>
</table>
</body>
</html>

 

menu.inc.php

<strong>Menu:</strong><br/>
<a href="index.php?page=home">Home</a><br/>
<a href="index.php?page=news">News</a><br/>
<a href="index.php?page=news_add">Add News</a><br/>
<a href="index.php?page=form_id">Form</a><br/>
<a href="index.php?page=form">Add Member</a><br/><br/>

<a href="../forum/index.php">Forum</a><br/><br/>


<?php
if ($_SESSION['loggedin'] == "false")
{
?>
<form name="login" method="post" action="index.php?page=login">
 <table class="table_login" width="150" border="0" cellspacing="0" cellpadding="0">
 	<tr>
   <td class="table_login_td">Username:</td>
   <td><input name="username" type="text" id="username" size="10"></td>
 	</tr>
 	<tr>
   <td class="table_login_td">Password:</td>
   <td><input name="password" type="password" id="password" size="10"/></td>
 	</tr>
 	<tr>
   <td> </td>
   <td><input name="login" type="submit" id="login" value="Login"/></td>
 	</tr>
 </table>
</form>
<?php
}
else
{
echo "<a href=index.php?page=logout>Log Out</a>";
}

?>

 

login.php

<?php
$user = 'p';
$pass = 'p';

if (($_POST['username'] == $user) && ($_POST['password'] == $pass))
{
 $_SESSION['loggedin'] = "true";
 echo "You are logged in. <br>";
 echo "session state: ".$_SESSION['loggedin'];
 exit;
}
else
{
 $_SESSION['loggedin'] = "false";
 echo "You are not logged in. <br>";
 echo "session state: ".$_SESSION['loggedin'];
}
?>

 

logout.php

<?php
$_SESSION['loggedin'] = "false";

echo "You are logged out.";
?>

 

Problemet (tror jeg) er at ikke siden blir refresha, men at bare login(eller logout).php blir inkludert. Vet ikke helt hvordan dette kan fikses...

Har prøvd med header("Location: index.php"); i scriptene, men da fikk jeg feilmelding...

Endret av Pangaea
Lenke til kommentar
Findus:

 

feil måte:

[CODE]
<?php

 

rett måte:

[CODE]<?php

 

:cool:

 

EDIT: smiley...

Uff. Blir så fæl struktur da.

 

echo "test"; $haha = "hmm"; include("ting.php");

 

Ser ikke akkurat delikat ut :)

 

 

Pangaea, ha tålmodighet. Veldig mange her er hyggelige å svarer på det meste som blir spurt. Svaret kommer nok, men det hender jo at vi faktisk har ting vi må gjøre selv og, tro det eller ei. 2 timer venting er ingen ting :)

Lenke til kommentar

Forstår selfølgelig det :)

Bare frustrerende å sitte og prøve utrolig mange ting, og ikke få det til.

 

Edit: Hurra, klarte endelig å løse det :thumbs:

La om litt if setninger her og der, og la inn session_start() noen flere plasser, og så funka det. Herlig!

Endret av Pangaea
Lenke til kommentar
Findus:

 

feil måte:

[CODE]
<?php

 

rett måte:

[CODE]<?php

 

:cool:

 

EDIT: smiley...

Uff. Blir så fæl struktur da.

 

echo "test"; $haha = "hmm"; include("ting.php");

 

Ser ikke akkurat delikat ut :)

 

 

Pangaea, ha tålmodighet. Veldig mange her er hyggelige å svarer på det meste som blir spurt. Svaret kommer nok, men det hender jo at vi faktisk har ting vi må gjøre selv og, tro det eller ei. 2 timer venting er ingen ting :)

ække det som er poenget - skal du vise at det er en linjeskift øverst som ødelegger i et det ene tilfellet, bør du skrie <?php like etter

 slik at det ikke kommer fram noen linjeskift i koden du skisserer - så blir det mer forståelig til han du forklarer poenget til.
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...