Avatar billede orangefisk Nybegynder
18. august 2004 - 21:06 Der er 26 kommentarer og
1 løsning

Kan ikke sende session cookie

Jeps :)
Hejsa folkens. Sidder her og prøver at få sessions til at virke. Fandt i første omgang ud af at "session.save_path = c:\tmp" ikke var sat op - men da jeg fik det rettet kom disse fejl i stedet:


Warning: session_start(): Cannot send session cookie - headers already sent by (output started at C:\Programmer\Apache Group\Apache2\htdocs\dynamic_andersson\adminlogin.php:6) in C:\Programmer\Apache Group\Apache2\htdocs\dynamic_andersson\adminlogin.php on line 14

Warning: session_start(): Cannot send session cache limiter - headers already sent (output started at C:\Programmer\Apache Group\Apache2\htdocs\dynamic_andersson\adminlogin.php:6) in C:\Programmer\Apache Group\Apache2\htdocs\dynamic_andersson\adminlogin.php on line 14
error making query
Avatar billede taskmgr Nybegynder
18. august 2004 - 21:10 #1
Udskriver du noget før din header()?
Avatar billede orangefisk Nybegynder
18. august 2004 - 21:11 #2
Tja - her er filen:

<?php
    $user_name = $_POST['user_name'];
    $password = $_POST['password'];
?>

<?php
    session_start();
    $db_user = 'user';
    $db_pass = 'pass';
    $user_name = $_POST['user_name'];
    $password = $_POST['password'];

    //connect to the DB and select the "dictator" database
    $connection = mysql_connect('localhost', $db_user, $db_pass) or die(mysql_error());
    mysql_select_db('andersson_db', $connection) or die(mysql_error());

    //set up the query
    $query = "SELECT * FROM users
            WHERE user_name='$user_name' AND password='$password'";
           
    //run the query and get the number of affected rows
    $result = mysql_query($query, $connection) or die('error making query');
    $affected_rows = mysql_num_rows($result);

    //if there's exactly one result, the user is validated. Otherwise, he's invalid
    if($affected_rows == 1) {
        print 'validated';
    }
    else {
        print 'not valid';
    }
?>
Avatar billede taskmgr Nybegynder
18. august 2004 - 21:12 #3
Før din session_start() mente jeg naturligvis :)
Avatar billede orangefisk Nybegynder
18. august 2004 - 21:12 #4
( Hehe )
Avatar billede taskmgr Nybegynder
18. august 2004 - 21:13 #5
Prøv:

<?php
    session_start();
    $user_name = $_POST['user_name'];
    $password = $_POST['password']; 
    $db_user = 'user';
    $db_pass = 'pass';
    $user_name = $_POST['user_name'];
    $password = $_POST['password'];

    //connect to the DB and select the "dictator" database
    $connection = mysql_connect('localhost', $db_user, $db_pass) or die(mysql_error());
    mysql_select_db('andersson_db', $connection) or die(mysql_error());

    //set up the query
    $query = "SELECT * FROM users
            WHERE user_name='$user_name' AND password='$password'";
           
    //run the query and get the number of affected rows
    $result = mysql_query($query, $connection) or die('error making query');
    $affected_rows = mysql_num_rows($result);

    //if there's exactly one result, the user is validated. Otherwise, he's invalid
    if($affected_rows == 1) {
        print 'validated';
    }
    else {
        print 'not valid';
    }
?>

Og sørg desuden for at du ikke har nogle mellemrum før "<?php"
Avatar billede orangefisk Nybegynder
18. august 2004 - 21:15 #6
Hmm...

<? php
    session_start();
    $user_name = $_POST['user_name'];
    $password = $_POST['password'];

...


Fejl:
Parse error: parse error, unexpected T_STRING in C:\Programmer\Apache Group\Apache2\htdocs\dynamic_andersson\adminlogin.php on line 2
Avatar billede orangefisk Nybegynder
18. august 2004 - 21:16 #7
Aaah - mellemrummet *G*
Det virker - hvordan smider jeg point i din retning?
Avatar billede taskmgr Nybegynder
18. august 2004 - 21:17 #8
Jeg smider et svar her :)
MEN, jeg vil ikke ha' mere end 50 for det her. Smid et svar og giv dig selv resten.
Avatar billede orangefisk Nybegynder
18. august 2004 - 21:20 #9
Naah - Hurtigt svar, 200 ska' du ha... Vender tilbage senere :)
Avatar billede taskmgr Nybegynder
18. august 2004 - 21:20 #10
Du er sikker på at du ikke vil ha' nogle af dem tilbage? 200 p. er mildest talt i overkanten for et spm. som dette.
Avatar billede taskmgr Nybegynder
18. august 2004 - 21:21 #11
Jamen ok, fair nok :)
Avatar billede orangefisk Nybegynder
18. august 2004 - 21:22 #12
Naah - smider et par spørgsmål senere.
Avatar billede taskmgr Nybegynder
18. august 2004 - 21:23 #13
Ok, så bliver jeg hængende.
Avatar billede orangefisk Nybegynder
18. august 2004 - 21:29 #14
Det er bare super. Måske du kan fortælle mig hvordan jeg så beskytter de underlæggende admin sider med denne session?
Avatar billede taskmgr Nybegynder
18. august 2004 - 21:36 #15
Her, i din if, kan du gøre eks. således:

    if($affected_rows == 1) {
        print 'validated';
        $_SESSION['logged_in'] = 1;
    }
    else {
        print 'not valid';
        $_SESSION['logged_in'] = 0;
    }

Nå er $_SESSION['logged_in'] lig med 1 hvis brugeren er blevet logget ind og 0 hvis han ikke er. Dvs. at du, på dine admin sider kan kontrollere om $_SESSION['logged_in'] er lig med 1, f.eks.:

beskyttet.php:
<?php
session_start();
if($_SESSION['logged_in'] == 1){
  echo "Du er logget korrekt ind, og kan derfor se denne side.";
}else{
  echo "Ingen adgang. Du skal være logget ind."
}
?>

Husk, at når du bruger dine $_SESSION værdier skal der altid startes med session_start()
Avatar billede taskmgr Nybegynder
18. august 2004 - 21:37 #16
Der mangler et semikolon i den 3. sidste linie :)
Avatar billede orangefisk Nybegynder
18. august 2004 - 21:42 #17
Hmm - har lavet et link efter

  if($affected_rows == 1) {
        print '<a href="administration.php">Videre til administration</a>';
    }
    else {
        print 'not valid';
    }

Det fungerer sådanset udemærket - men når administration.php åbnes med ovenstående script får jeg "Ingen adgang. Du skal være logget ind."
Avatar billede taskmgr Nybegynder
18. august 2004 - 21:44 #18
Du mangler at sætte $_SESSION['logged_in']

if($affected_rows == 1) {
        $_SESSION['logged_in'] = 1;
        print '<a href="administration.php">Videre til administration</a>';
    }
    else {
        $_SESSION['logged_in'] = 0;
        print 'not valid';
    }
Avatar billede orangefisk Nybegynder
18. august 2004 - 21:47 #19
Hehe ... Tusinde tak. Tror sku jeg bliver nødt til at fylde mig med en spand kaffe - tsk tsk tsk :)
Avatar billede taskmgr Nybegynder
18. august 2004 - 21:52 #20
God idé.. Det er uden tvivl det bedste brændstof til den slags :)
Avatar billede orangefisk Nybegynder
18. august 2004 - 21:57 #21
Hmm - hvis du er klar på en mere:

I stedet for "print 'not valid';" vil jeg gerne have den til at kalde "index.php?side=notvalid"

Du sidder selvfølgelig med en hurtig løsning?
Avatar billede taskmgr Nybegynder
18. august 2004 - 22:00 #22
Naturligvis ;)

if($affected_rows == 1) {
        $_SESSION['logged_in'] = 1;
        print '<a href="administration.php">Videre til administration</a>';
    }
    else {
        $_SESSION['logged_in'] = 0;
        header("Location: index.php?side=notvalid");
    }
Avatar billede orangefisk Nybegynder
18. august 2004 - 22:05 #23
Aaaaaaaaaaaaaaaaalt for lækkert! Helt sikkert du har fortjent de point :D
Avatar billede taskmgr Nybegynder
18. august 2004 - 22:10 #24
Det var skam så lidt :) Jeg vil smutte nu, men du er velkommen til at spørge yderligere, så prøver jeg at følge med.

Tak for en sober tone.
Avatar billede orangefisk Nybegynder
18. august 2004 - 22:13 #25
Hehe - jamen det er mig der takker.
En lille sidste ting hvis du kan nå det. Kan jeg stadig hente det indtastede username når jeg er gået til det næste dokument? ( Altså administration.php )

Lidt som i "Velkommen til administration $user_name"
Avatar billede taskmgr Nybegynder
18. august 2004 - 22:19 #26
Det bli'r kort :) Ja, det kan du sagtens - på flere måder.

Du kan (dér hvor du sætter $_SESSION['logged_in'] = 1), lave en session variabel med enten brugernavnet eller et id på brugeren (hvis du har et sådan i db'en). Eks. på den første metode:

if($affected_rows == 1) {
        $_SESSION['logged_in'] = 1;
        $_SESSION['brugernavn'] = $user_name;
        print '<a href="administration.php">Videre til administration</a>';
    }
    else {
        $_SESSION['logged_in'] = 0;
        header("Location: index.php?side=notvalid");
    }

Nu har du brugernavnet i $_SESSION['brugernavn'], og kan på din administrations side udskrive denne og få brugernavnet frem :)
Avatar billede orangefisk Nybegynder
18. august 2004 - 22:20 #27
Det er bare super. Godnat til Dem unge herre. Og mange tak igen
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
Computerworld tilbyder specialiserede kurser i database-management

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