Avatar billede cyrusdk Nybegynder
22. maj 2004 - 13:10 Der er 30 kommentarer og
1 løsning

Session variable føres ikke med fra side til side

Hejsa derude

Jeg har forsøgt at lave et login-script efter en tutorial. Jeg er desværre gået helt i stå efter jeg har fundet ud af at de variable jeg sætter når en bruger er logget ind, ikke kan fremkaldes på nogen af de efterfølgende sider.

Koden til side 1 er her:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>*********</title>
</head>

<body>

<?
    /* Check User Script */
    session_start();  // Start Session
   
    //Select which database the query are performed on
    $dbname = "*******";
   
    //Contains the connection and the db selection
    require '*************';
   
    // Convert to simple variables
    $username = $_POST['username'];
    $password = $_POST['password'];
   
    if (!$username || !$password)
    {
        echo "
        <SCRIPT LANGUAGE='JavaScript'><!--
        alert('Du skal indtaste brugernavn og password.');
        history.go(-1);
        //--></SCRIPT>
        ";
    }
    else
    {
        // Convert password to md5 hash
        $password = md5($password);
       
        /* perfoming SQL query */
        $query = "SELECT * FROM users WHERE username='$username' AND password='$password'";
        $result = mysql_query($query) or die ("Query Error!<br><br>The error returned from the database is: ".mysql_error());
        $array = mysql_fetch_array($result);
   
        if($array[2] == $username && $array[3] == $password)
        {
                               
                    // Register some session variables!
                    $_SESSION['company'] = $array[1];
                    $_SESSION['logged_in'] = 1;
                    $_SESSION['user_level'] = $array[5];
                    $_SESSION['userid'] = $array[0];
                   
                    mysql_query("UPDATE users SET last_login=now() WHERE userid='$userid'");
                   
                    //header("Location: login_success.php");
        }
       
        else
        {
            ?>
            <SCRIPT LANGUAGE="JavaScript"><!--
                alert("Fejl i brugernavn eller password.");
                history.go(-1);
            //--></SCRIPT>
            <?
        }
    }
?>
</body>
</html>

_________________________________________________

Koden på side to, hvor variablerne benyttes er som følger:

<? session_start(); ?>
<html>
<head>
<title>Untitled Document</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>

<body>
<?
        // Print some session variables!
                echo "<br>Session ID: ".session_id();
               
                echo "<br>Company: ".$_SESSION['company'];

                echo "<br>Logged in: ".$_SESSION['logged_in'] ;

                echo "<br>userlevel: ".$_SESSION['user_level'];
               
                echo "<br>userid: ".$_SESSION['userid'];
?>
</body>
</html>


____________________________________________

Det eneste jeg kan få udskrevet er session_id() og den virker altid. Det er samme id på alle sider.
Hvad er det lige jeg går forkert? Hvordan får jeg det til at virke så jeg kan benytte mig af de variable jeg sætter på side 1, på alle de andre sider der er på webstedet?

På forhånd tak,
Thomas
Avatar billede dennismp Nybegynder
22. maj 2004 - 13:13 #1
Prøv at sætte session_start() aller øverst i din kode til side 1
Avatar billede cyrusdk Nybegynder
22. maj 2004 - 14:06 #2
Det virkede desværre ikke... samme problem som før.
Avatar billede dennismp Nybegynder
22. maj 2004 - 14:24 #3
prøv

Side 1:
efter din session_start(); skriver du
$_SESSION['test'] = 1;

på side 2:
skriver du efter, session_start()
print "<pre>"; print_r($_SESSION); print "</pre>";

Hvad får du som output?
Avatar billede cyrusdk Nybegynder
22. maj 2004 - 14:28 #4
Output:

Array
(
)


Session ID: 5b32ff885ad3884541f2f8e469259c9c
Company:
Logged in:
userlevel:
userid:
Avatar billede dennismp Nybegynder
22. maj 2004 - 15:33 #5
Er dit sessionid i URL'en? (i stil med ?PHPSESSID=5b32ff885ad3884541f2f8e469259c9c)
Avatar billede cyrusdk Nybegynder
22. maj 2004 - 18:18 #6
Der er intet session id i URL'en
Avatar billede dennismp Nybegynder
22. maj 2004 - 18:26 #7
Har du prøvet at lave nogle friske filer..  og så taste;

<?php
session_start();

if( isset($_SESSION['count']) )
  $count = $_SESSION['count'];
else
  $count = 0;
$count++;
print "Du har set mig $count gange";
?>

reload et par gange - hvis det virker bør tallet stige.
Avatar billede cyrusdk Nybegynder
22. maj 2004 - 19:52 #8
Det virker fint hvis jeg holder mig på samme side. Så kan jeg sagtens få printet de variable der er sat i sessionen... Det er først så snart jeg går over til en ny side at de ikke vil...
Altså vil ovenstående forslag virke fint.
Avatar billede dennismp Nybegynder
23. maj 2004 - 02:38 #9
Det gi'r bare ikke mening. Din session må ligge i en cookie (siden den ikke er i url'en) - så eneste idé jeg pt har, er at du måske får skiftet domæne (fx www.dig.dk til dig.dk).. Men jeg tvivler.

Bruger du noget specielt? Har du lavet en session_handler?
Avatar billede alleykat Nybegynder
23. maj 2004 - 06:42 #10
Jeg kan ikke helt se at de 2 sider på nogen måde hænger sammen..?
Avatar billede cyrusdk Nybegynder
23. maj 2004 - 09:22 #11
dennismp: Du kan have fat i noget der. Jeg kører en apache-server med en 3-4 domæner på. Hoveddomænet for serveren er www.kebun.net, det domæne ovenstående sider kører på er www.logic-it.dk. Måske php ikke kan finde ud af sessions, når der er flere domæner kørende på apache serveren?

alleykat: De hænger sammen på den måde at side 1 sætter nogle session variable og side 2 forsøger at udskrive dem på skærmen, hvilket så fejler.
Avatar billede dennismp Nybegynder
23. maj 2004 - 10:28 #12
Du kan jo prøve at tilføje $_SERVER["SERVER_NAME"] til det du skriver ud på siderne - og se om det ændre sig.
Avatar billede cyrusdk Nybegynder
23. maj 2004 - 12:00 #13
Den ændrer sig ikke. Er den samme på begge sider.
Avatar billede dennismp Nybegynder
23. maj 2004 - 12:13 #14
Det eneste der er ændret i koden iforhold til koden i spørgsmålet, er at session_start() er flyttet øverst oppe på side 1?

Hvilken PHP version bruger du?
Bruger du PHP som CGI eller som modul?
Avatar billede cyrusdk Nybegynder
23. maj 2004 - 12:19 #15
PHP Version 4.3.4 kører som modul.
Og det eneste der er ændret er at session_start() er flyttet op øverst på side 1 ja.
Avatar billede dennismp Nybegynder
23. maj 2004 - 12:24 #16
Ok, dette virker måske dumt, men prøv at lave to ens filer (1.php og 2.php)
der indeholder
<?php
session_start();

if( isset($_SESSION['count']) )
  $count = $_SESSION['count'];
else
  $count = 0;
$count++;
print "Du har set mig $count gange.";
print 'Tryk <a href="1.php">1</a> eller <a href="2.php">2</a>";
?>

tryk på 1 et par gange.. derefter to.. resetter den tælleren? Kan jeg selv prøve?
Avatar billede cyrusdk Nybegynder
23. maj 2004 - 17:12 #17
IP: ftp.logic-it.dk
Username: test
Password: YkcUaaaA

Sti til selve siden: www.logic-it.dk/test
For at komme ind på siden skal du bruge username/password: test/test

Jeg er lidt spændt på om du får det til at virke.
Avatar billede dennismp Nybegynder
23. maj 2004 - 18:58 #18
Der ligger der ikke noget php? :)
Avatar billede cyrusdk Nybegynder
23. maj 2004 - 23:16 #19
der ligger ikke noget... men du kunne uploade de filer du ville teste på tænkte jeg.
Avatar billede cyrusdk Nybegynder
23. maj 2004 - 23:16 #20
Men giv mig lige til i morgen så skal jeg få det ordnet sådan at du kan se direkte i de filer jeg har problemer med :)
Avatar billede dennismp Nybegynder
23. maj 2004 - 23:23 #21
Du skriver bare når du er klar :).
Avatar billede cyrusdk Nybegynder
24. maj 2004 - 10:34 #22
Så er den klar til lidt leg :)
Samme info som før, bortset fra login til siden. Den er look/look i stedet for test/test.
Du kan downloade filerne fra ftp'en, samt uploade ændringer. Du roder bare med dem så meget du vil, jeg har kopier :)
Avatar billede dennismp Nybegynder
24. maj 2004 - 19:42 #23
Hvad er login til siden? test/test ser ikke ud til at virke.
Avatar billede cyrusdk Nybegynder
24. maj 2004 - 21:44 #24
lol... skrev jeg i svaret...

"Så er den klar til lidt leg :)
Samme info som før, bortset fra login til siden. Den er look/look i stedet for test/test.
"
Avatar billede dennismp Nybegynder
24. maj 2004 - 22:23 #25
Flot klaret dennis :-)

session.save_path = /tmp

Det tror jeg ikke virker på en windows maskine - prøv at rette den til noget fornuftigt
Avatar billede cyrusdk Nybegynder
25. maj 2004 - 08:56 #26
Hvor ser du den henne? fil og linienr?
Avatar billede dennismp Nybegynder
25. maj 2004 - 23:59 #27
Det er noget der står i din php.ini.. (Ved ikke hvor den ligger på en Windows maskine)
Avatar billede cyrusdk Nybegynder
26. maj 2004 - 09:04 #28
Det stod der sørme også i beskrivelsen i php.ini. Hmmm, gad vide om der er flere af sådan nogle ting?

Jeg har rettet den til session.save_path = d:\Apache\php\session.
OG DET VIIIIIIRKEEEER! Weeeeeeeeeeeeeeeeeeeee.

Damn, dét er for sejt. Tusind tak for hjælpen :) Den ville jeg ikke have fundet selv.
Nu kan jeg endelig komme videre.

:-D
Avatar billede cyrusdk Nybegynder
26. maj 2004 - 09:04 #29
Så må du jo lige kaste et svar så du kan få dine point :)
Avatar billede dennismp Nybegynder
26. maj 2004 - 22:00 #30
Goodie, dette må jeg huske til en anden gang :)

(og lære at læse hvad folk skriver :) )
Avatar billede cyrusdk Nybegynder
27. maj 2004 - 08:42 #31
hehe, det gik jo alligevel ;)
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