19. september 2003 - 20:29Der er
30 kommentarer og 1 løsning
Problem med sessions i php.
Jeg har et problem. Endten har jeg ikke styr på hvordan sessions virker, eller også virker de ikke som de skal.
Meningen er den:
Når en bruger logger på min hjemmeside, skal der fremkomme en anden menu der hvor login boxen er. Det kommer der også, efter man er logget ind. Men klikker man så på et andet link, kommer login boxen frem igen. Selvom jeg tjekker om den givne session er aktiv.
Hele siden er bygget op vha. Switch. og include.
Jeg har en index.php som er delt op i 3, hvis man kan sige det sådan.
der har jeg så leftmenu.php, main.php og rightmenu.php. Disse er inkluderet i index.php
Rightmenu.php, består af login.php, og community.php. login.php skal inkluderes, hvis brugeren ikke i forvejen er logget ind. Og community.php skal inkluderes hvis brugeren er logget ind.
i min rightmenu.php er login "systemet".
Det der rent faktisk sker, når jeg prøver at logge ind:
Jeg logger ind. Kommer til den side jeg skal komme frem til. Og login boxen i rightmenu.php er som den skal, skiftet ud med Community.php, Altså en menu for community brugere der er logget ind.
Klikker man så på et link, hvor som helst på siden. Så er det ikke community.php, men login.php der er inkluderet.
Jeg forstår simpelthen ikke hvorfor det ikke virker.
Hvis i vil se noget kode, så må i fortælle mig hvilke filer i vil se kode for. Håber der er nogle php guruer der kan hjælpe mig. Jeg har prøvet at løse problemet i 12 timer snart.
php.ini ligger i windows dir. Og jeg har sat session.save_path = c:\php\tmp
Der hvor mine sessions bliver sat:
case 'login': db_connect(); if(!isset($_POST['Submit'])) { //Tester om brugeren kom fra login.html echo "Du har ikke brugt login formen."; }else{ $postbruger = $_POST['brugernavn']; $postpass = $_POST['adgangskode']; //For læservenligheden overføres post variablerne til normale variabler
$resultat = mysql_query("SELECT Id FROM `brugere` WHERE brugernavn = '$postbruger' AND adgangskode = '$postpass'");//Spørger efter ID $number = mysql_num_rows($resultat);//Tæller antaller af resultater if($number == 1) { //Hvis der kun er et resultat, bliver brugeren logget in $_SESSION['logget_ind'] = 1; $_SESSION['brugernavn'] = $postbruger; $_SESSION['adgangskode'] = $postpass; //Sætter session variablerne include('inc/main/loginsys/loggedin.php'); }else echo"De indtastede oplysninger er ikke korrekte"; };
break;
Dette ligger i main.php. Jeg bruger så min case som action i login formen. Altså action="?mode=login"
Her kommer alle filerne. Håber i/du kan holde styr på det :)
main.php(uden min db_connect):
<? function db_query ($sql, $link) { if (!($result = mysql_query($sql, $link))) { echo("(1)mysql error: " . mysql_errno() . " " . mysql_error()); return 0 ; } return $result; }; $ip = $_SERVER['REMOTE_ADDR']; switch ($_GET['mode']) { case 'allnews': Include('inc/main/news/allnews.php'); $link = db_connect(); $location = $_SERVER['QUERY_STRING']; $sql = "UPDATE online_users SET location = '/index.php?$location' WHERE ip ='$ip'"; db_query($sql,$link); break; case 'news': switch ($_GET['kat']) { case 'it': include('inc/main/news/it/it.php'); $link = db_connect(); $sql = "UPDATE online_users SET location = '/index.php?mode=news&kat=it' WHERE ip ='$ip'"; db_query($sql,$link); break;
case 'film': include('inc/main/news/film/film.php'); $link = db_connect(); $sql = "UPDATE online_users SET location = '/index.php?mode=news&kat=film' WHERE ip ='$ip'"; db_query($sql,$link); break;
case 'generelt': include('inc/main/news/generelt/generelt.php'); $link = db_connect(); $sql = "UPDATE online_users SET location = '/index.php?mode=news&kat=generelt' WHERE ip ='$ip'"; db_query($sql,$link); break;
case 'ligegyldig': include('inc/main/news/ligegyldig/ligegyldig.php'); $link = db_connect(); $sql = "UPDATE online_users SET location = '/index.php?mode=news&kat=ligegyldig' WHERE ip ='$ip'"; db_query($sql,$link); break; }; break;
case 'laesnews': $IDnews = $_GET['ID']; $kategori = $_GET['kat']; $link = db_connect(); $sql = "UPDATE online_users SET location = '/index.php?mode=laesnews&kat=$kategori&ID=$IDnews' WHERE ip ='$ip'"; db_query($sql,$link); $link = db_connect(); $sql = "SELECT * FROM news WHERE kategori = '$kategori' AND ID = '$IDnews'"; $res = db_query($sql, $link);
case 'login': db_connect(); if(!isset($_POST['Submit'])) { //Tester om brugeren kom fra login.html echo "Du har ikke brugt login formen."; }else{ $postbruger = $_POST['brugernavn']; $postpass = $_POST['adgangskode']; //For læservenligheden overføres post variablerne til normale variabler
$resultat = mysql_query("SELECT Id FROM `brugere` WHERE brugernavn = '$postbruger' AND adgangskode = '$postpass'");//Spørger efter ID $number = mysql_num_rows($resultat);//Tæller antaller af resultater if($number == 1) { //Hvis der kun er et resultat, bliver brugeren logget in $_SESSION['logget_ind'] = 1; $_SESSION['brugernavn'] = $postbruger; $_SESSION['adgangskode'] = $postpass; //Sætter session variablerne include('inc/main/loginsys/loggedin.php'); }else echo"De indtastede oplysninger er ikke korrekte"; };
mysql_connect($mysql_host,$mysql_user,$mysql_password); mysql_select_db("fjappedk"); $time = explode(" ",microtime()); $array1 = $time[0]; $array2 = $time[1]; $location = $_GET['QUERY_STRING']; if ($location == null) { $location = "/index.php"; }; $r = mysql_fetch_row( mysql_query("SELECT * FROM online_users WHERE ip like '$ip'")); if ($r == (false)) { mysql_query("INSERT INTO online_users (id,ip,name,location,date) values ('','$ip','$name','$location','$array2')"); } mysql_query("DELETE FROM online_users where date < $array2 - 400"); $res = mysql_query("SELECT * FROM online_users"); $tal = mysql_num_rows($res);
$dDagNumMaaned = date('j'); // Dagens nummer i indeværende måned // (et tal mellem 1-31, begge iregnet) $dMaanedNumAar = date('n'); // Måneds nummer i året //(et tal mellem 1-12, begge iregnet) $dAarNu = date('Y'); // Indeværende år (4 cifre) $dDagNumUge = date('w'); // Dagens nummer i indeværende uge // (et tal mellem 0-6, begge iregnet)
<?php if(!$_SESSION['logget_ind'] == 1) {//Hvis brugeren ikke er logget in echo"Hvis du ikke er oprettet som bruger. Så opret dig :)";//Sender brugeren videre exit;//Sørger for at resten af koden, ikke bliver udført } $loggedin = $_SESSION['logget_ind']; $brugernavn = $_SESSION['brugernavn']; $adgangskode = $_SESSION['adgangskode']; $link = db_connect(); $sql = "SELECT * FROM brugere WHERE brugernavn = '$brugernavn' AND adgangskode = '$adgangskode'"; $res = db_query($sql, $link);
Da jeg mener selv, at have stillet spørgsmålet lidt mere konkret og overskueligt.
Synes godt om
Ny brugerNybegynder
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.