webForumDet fria alternativet

session-problem

36 svar · 525 visningar · startad av kalleklätter

kalleklätterMedlem sedan apr. 200354 inlägg
#1

Hejsan!
Har ett litet problem med sessions.
Detta felmeddelande får jag upp när jag försöker köra koden...har läst ganska mycket på nätet om denna typ av felmeddelande, men inte fått någon ordning på det. Det jag har förstått är att man ska ändra i php.ini filen till korrekt sökväg, etc. Och det har jag gjort, men jag får ändå upp detta felmeddelande...! Någon som har något tips?
Tacksam för snabbt svar. =)

Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at c:\inetpub\wwwroot\php\login\auth.php:2) in c:\inetpub\wwwroot\php\login\auth.php on line 5

Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at c:\inetpub\wwwroot\php\login\auth.php:2) in c:\inetpub\wwwroot\php\login\auth.php on line 5

Warning: Cannot modify header information - headers already sent by (output started at c:\inetpub\wwwroot\php\login\auth.php:2) in c:\inetpub\wwwroot\php\login\auth.php on line 30

MatteMedlem sedan aug. 20002 975 inlägg
#2

Före session_start() får du inte skicka något till webbläsaren.

Alltså ingen HTML-kod, ingen echo eller print. Även tomrader och mellanslag utanför PHP-taggarna skickar iväg något till webbläsaren.

Om du inkluderar en fil före session_start() så måste du vara väldigt noggrann med att inte ha några tomtecken efter den avslutande PHP-taggen (och naturligtvis inte heller före den inledande).

Därför är det oftast bäst att lägga session_start() allra överst på sidan.

kalleklätterMedlem sedan apr. 200354 inlägg
#3

aha. nu blev det lite mindre felmeddelanden iaf. =)

när jag skriver in rätt anv.namn och rätt lösenord får jag nu detta meddelande:

Notice: Undefined index: nickname in c:\inetpub\wwwroot\php\login\auth.php on line 11

Warning: Cannot modify header information - headers already sent by (output started at c:\inetpub\wwwroot\php\login\auth.php:11) in c:\inetpub\wwwroot\php\login\auth.php on line 12

scriptet som jag använder har jag tagit från phpsidan.nu så det borde funka som det är tycker man...men jag får iaf det där felmeddelandet när jag skriver in rätt namn och pwd... =(

några fler tips? :)

MatteMedlem sedan aug. 20002 975 inlägg
#4

Hur ser auth.php ut?

På rad 11 så försöker du göra något med en array-variabel. Denna variabel finns inte. Är det en $_POST eller $_SESSION eller något annat?
Om det är en $_POST-variabel, har du motsvarande fält i ditt formulär?

Ditt header-felmeddelande är ett följdfel av utskriften av notisen. För header() gäller samma sak som för session_start() när det gäller att inte skicka något till webbläsaren.

kalleklätterMedlem sedan apr. 200354 inlägg
#5

auth.php ser ut som följer:

kalleklätterMedlem sedan apr. 200354 inlägg
#6

auth.php ser ut som följer:

<?
session_start();
include("data.php"); // Inkluderar data.php som innehåller databasinställningarna
$db_connect = mysql_connect($Host,$User, $Pass);
mysql_select_db($Db, $db_connect);
$sql = "SELECT * FROM $Table WHERE username='".$_POST['username']."' AND Password='".$_POST['password']."'"; // Tittar i Tabellen efter Andvändarnamnet och Lösenordet du skrev in.
$result = @mysql_query($sql,$db_connect) or die("Failed Result");
$num = mysql_numrows($result);
if ($num != 0)
{
$_SESSION['user'] = $_POST['nickname']; // Gav du rätt Användarnamn och Lösenord får du en "session".
header("Location: efter.php"); // Du skickas iväg till angiven sida, i vårat fall: efter.php
exit;
}else {
header("Location: login.php"); // Skrev du fel så skickas du till denna sida
exit;
}
?>

undrar vad det kan vara för fel? :(

MatteMedlem sedan aug. 20002 975 inlägg
#7

Har du något fält med namn 'nickname' i ditt formulär ?
Hur ser ditt formulär ut?

Detta ser ut som en inloggning, och då skriver man oftast bara användarnamn och lösenord.

Om det är en inloggning så kanske det skulle vara så här istället:

<? 
session_start(); 
include("data.php"); // Inkluderar data.php som innehåller databasinställningarna 
$db_connect = mysql_connect($Host,$User, $Pass); 
mysql_select_db($Db, $db_connect); 

$sql = "SELECT * FROM $Table WHERE username='".$_POST['username']."' 
        AND Password='".$_POST['password']."'"; // Tittar i Tabellen efter Andvändarnamnet och Lösenordet du skrev in. 
$result = @mysql_query($sql,$db_connect) or die("Failed Result"); 
$num = mysql_num_rows($result); 
if ($num != 0) 
{ 
    $_SESSION['user'] = $_POST['username']; // Gav du rätt Användarnamn och Lösenord får du en "session". 
    header("Location: efter.php"); // Du skickas iväg till angiven sida, i vårat fall: efter.php 
    exit; 
}else { 
    header("Location: login.php"); // Skrev du fel så skickas du till denna sida 
    exit; 
} 
?>
kalleklätterMedlem sedan apr. 200354 inlägg
#8

så här ser inloggningssidan ut:

<?
if ($_GET['error'] == "logon"){
echo "Fel lösenord eller användarnamn";
}
?>
<HTML>
<BODY>
<FORM METHOD="post" ACTION="auth.php">
<CENTER>
Username:
<INPUT TYPE="text" NAME="username" size="15">
<BR>
Password:
<INPUT TYPE="password" NAME="password" size="15">
<BR>
<INPUT TYPE="submit" NAME="login" VALUE="Login">
</CENTER>
</FORM>
</BODY>
</HTML>

alltså jag har ändrat till username för så borde det ju vara eftersom att det är en _POST...men då kommer jag tillbaka till första sidan även om jag skriver in rätt lösenord etc... ?! sen det där header-felet lyckas jag inte få bort...har kollat efter mellanslag etc....

MatteMedlem sedan aug. 20002 975 inlägg
#9

Vilket headerfel i vilken fil?

Kan det vara något i efter.php som skickar tillbaka till login?
Hur ser efter.php ut i början (sessions-kontrollen)?

Hur ser din fil auth.php ut nu efter dina ändringar?

kalleklätterMedlem sedan apr. 200354 inlägg
#10

här kommer alla filerna hur dom ser ut. :)

auth.php

<?
session_start();
include("data.php");
$db_connect = mysql_connect($Host,$User, $Pass);
mysql_select_db($Db, $db_connect);

$sql = "SELECT * FROM $Table WHERE username='".$_POST['username']."'
AND Password='".$_POST['password']."'";
$result = @mysql_query($sql,$db_connect) or die("Failed Result");
$num = mysql_num_rows($result);
if ($num != 0)
{
$_SESSION['user'] = $_POST['username'];
header("Location: efter.php");
exit;
}else {
header("Location: login.php");
exit;
}
?>

efter.php

<?
session_start();
if (!isset($_SESSION['user'])){
header("Location: login.php?error=logon");
exit;
}
?>

login.php

<?
if ($_GET['error'] == "logon"){
echo "Fel lösenord eller användarnamn";
}
?>
<HTML>
<BODY>
<FORM METHOD="post" ACTION="auth.php">
<CENTER>
Username:
<INPUT TYPE="text" NAME="username" size="15">
<BR>
Password:
<INPUT TYPE="password" NAME="password" size="15">
<BR>
<INPUT TYPE="submit" NAME="login" VALUE="Login">
</CENTER>
</FORM>
</BODY>
</HTML>

kan det vara ngt jag har missat att ändra i php.ini eller ngn rättighet jag kan ha missat att ge ut (om det behövs vill säga)?

MatteMedlem sedan aug. 20002 975 inlägg
#11

När du kommer tillbaka till login.php, får du då meddelande: "Fel lösenord eller användarnamn", eller får du bara formuläret?

Du skrev något om att du fortfarande fick felmeddelande.
Hur lyder dom, och i vilka filer?

kalleklätterMedlem sedan apr. 200354 inlägg
#12

första gången jag går in på login.php så får jag

Notice: Undefined index: error in c:\inetpub\wwwroot\php\login\login.php on line 2

när jag loggar in med rätt anv. namn kommer jag tillbaka till första sidan och så står det:

Fel lösenord eller användarnamn

:)

kalleklätterMedlem sedan apr. 200354 inlägg
#13

och om jag loggar in med fel får jag det första meddelandet:

Notice: Undefined index: error in c:\inetpub\wwwroot\php\login\login.php on line 2

=//

MatteMedlem sedan aug. 20002 975 inlägg
#14

Ditt felmeddelande har inget med sessioner att göra. fixas med följande ändring:

if (isset($_GET['error']) && $_GET['error'] == "logon"){ 
    echo "Fel lösenord eller användarnamn"; 
}

Sen får vi börja nysta lite på sessionen.
Vad blir det för utfall om du skriver:

if ($num != 0) 
{ 
$_SESSION['user'] = $_POST['username']; 
    header("Location: efter.php?".SID); 
    exit; 
}else {

Ligger de här sidorna i någon frame i ett frameset, där framesetet ligger på en annan domän än din inloggningssida?

kalleklätterMedlem sedan apr. 200354 inlägg
#15

nu funkar det! :)

vad gjorde den där .SID grejjen?

kalleklätterMedlem sedan apr. 200354 inlägg
#16

just ja, sidan ligger inte i ett frameset. =)

MatteMedlem sedan aug. 20002 975 inlägg
#17

Kontrollera att sessionen verkligen hänger kvar när du surfar på flera sidor.

Vad jag gjorde var att skicka med sessionsid med URL-en.

Vi kan nu konstatera att ditt problem ligger/låg på cookie-sidan.

Normalt så sätts en cookie med sessionsid, men om det är problem med cookies så kan man skicka med sessionsid med URL-en.

Men sen ska den hänga med till andra sidor! Och det är frågan om den gör det här.

kalleklätterMedlem sedan apr. 200354 inlägg
#18

jag är helt ny på det här med sessioner...hur kontrollerar man om sessionen hänger kvar när man surfar på flera sidor?
och varför måste den hänga kvar?

:q

MatteMedlem sedan aug. 20002 975 inlägg
#19

Det är det som är hela idén med sessioner. Du sparar ett värde som hänger med dig personligt över flera sidor.
Tänk dig om du var tvungen att logga in på webForum varje gång du skulle läsa en tråd eller skriva ett svar.

Är din cookie satt så kan du gå till en helt annan sida och sedan tillbaka, och du är fortfarande inloggad.

MatteMedlem sedan aug. 20002 975 inlägg
#20

Kolla att du har följande inställning i php.ini:

session.use_cookies = 1

Efter ändring i php.ini ska webbservern startas om.
Vad använder du för webbserver?

132 ms totalt · 3 externa anrop · v20260731065814-full.3ab8d573
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
129 ms — hämta tråd, inlägg och bilagor (db)