session_start() oder dauerschleife?
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
array
benutzer
bereich
break
code
datei
datum
fehler
file
header
index
inhalt
level
login
opus
rest
status
stunden
text
tun
-
hi,
ich hatte schonmals ein loginsystem mit Sessions gebastelt und hab mir nun abermals ein neues angelegt
(einfach mit den codeschnipseln des letzen scripts).
nur dummerweise möchte jetzt nichts mehr funktionieren!
irgendwie werd ich das gefühl nicht los das es was mit
session_start();
zu tun hat!
Cookies sind überall aktzeptiert!
Opera: lädt so ca. 30sek aber dann funktioniert alles
Mozilla: vermutet eine dauerschleife
IE: öffnet rein gar nichts!
ansurfen via www.anonymouse.org: datei zu groß (deutet für mich auf dauerschleife hin)
hier mal die codes, wobei ich keine schleifenformation erkennen kann!!!
index.php
<?PHP include("checkuser.php"); ... ...
checkuser.php
<?PHP session_start(); if (!isset ($_SESSION["user"])){ header("location:loginform.php"); } else { include("db.php"); } ?>
loginform.php
... <form action="login.php" method="POST"> <table style="border:1px solid blue"> <tr><td>Name:</td><td><input type="name" name="benutzer" /></td></tr> <tr><td>Passwort:</td><td><input type="password" name="pass" /></td></tr> <tr><td colspan="2"><input style="float:right" type="submit" name="send" value="Ab gehts Babe" /></td></tr> </table> </form>...
login.php
<?PHP if(($_POST["benutzer"]=="..." AND $_POST["pass"]=="...") OR ($_POST["benutzer"]=="..." AND $_POST["pass"]=="...") OR ($_POST["benutzer"]=="..." AND $_POST["pass"]=="...")){ session_start(); $benutzer = $_POST["benutzer"]; $_SESSION["user"] = $benutzer; $_SESSION["time"] = time(); header("location: index.php"); } else { header("location:loginform.php"); } ?>
da es bei opera ja funktioniert (nur eben 30sek dauert) vermut ich das session_start einfach nur verdammt lang braucht um ausgeführt zu werden.
btw... wen ich eingeloggt wurde und mich auslogge:
logout.php
<?php ob_start (); session_start (); session_unset (); session_destroy (); header ("Location:loginform.php"); ob_end_flush (); ?>
ist das einloggen in sekundenbruchteilen erledigt!
was mir ebenfalls merkwürdig vorkommt ist die
$_SESSION['time']
im gesamten script soll angezeigt werden wie lange der user schon online ist.
time()-$_SESSION['time']
die session wird beim login gesetzt, seltsamerweise wird der user schonmal
standartmäßig auf eine stunde gesetzt, und nach ein paar klicks stimmt die zeit nicht mehr.
als wen $_SESSION['time'] manchmal eine alte aus dem cache ist und manchmal die aktuelle.
gruß -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Hi
ich weiß nicht genau ob und wie ich dir helfen kann,
trotzdem versuche ichs mal.
Du kannst generell mal session_start(); an den anfang deiner scripte schreiben,
natürlich nicht in Scripte die Included werden.
Dann würde ich dir zu einer anderen Denkweise raten, dafür muss ich aber wissen,
ob du Arrays kennst oder Datenbanken.
Ich nehm mal an ( $_POST["benutzer"]=="..." AND $_POST["pass"]=="..." ) sind Login-Daten
die du durch "..." ersetzt hast.
Wenn du nun nochmehr User hast, wird die Liste endlos.
Ich hab dir dein Script ohne Include nachgebaut, etwas effektiver wie ich finde.
<?php session_start(); $User = array( "username_1" => array( "passwort"=>"pass1", "status"=>1 ), "user_2" => array( "passwort"=>"passwort2", "status"=>1 ), "nickname3" => array( "passwort"=>"pa", "status"=>2 ), ); $Status = 0; $pass = !empty($_SESSION["us"]["pass"])?$_SESSION["us"]["pass"]:$_POST["pass"]; $benutzer = !empty($_SESSION["us"]["benutzer"])?$_SESSION["us"]["benutzer"]:$_POST["benutzer"]; if(!empty($benutzer) AND $pass == $User[$benutzer]["passwort"]) { $Status = $User[$benutzer]["status"]; $_SESSION["us"]["time"] = time(); $_SESSION["us"]["benutzer"] = $benutzer; $_SESSION["us"]["pass"] = $User[$benutzer]["passwort"]; }else{ if(!empty($benutzer) OR !empty($pass)) $Status = -1; unset($_SESSION["us"]); } if(!empty($_GET["logout"])) { $Status = 0; unset($_SESSION["us"]); } switch($Status) { case -1: ?> Login-Daten falsch!<br/> <a title="Zurück zum Login" href="<?=$_SERVER["PHP_SELF"]?>">Zurück</a> <?php break; case 0: ?> <form action="<?=$_SERVER["PHP_SELF"]?>" method="post"> <table style="border:1px solid blue"> <tr><td>Name:</td><td><input type="name" name="benutzer" /></td></tr> <tr><td>Passwort:</td><td><input type="password" name="pass" /></td></tr> <tr><td colspan="2"><input style="float:right" type="submit" name="send" value="Ab gehts Babe" /></td></tr> </table> </form> <?php break; case 1: ?> Eingeloggt in bereich 1!<br/> <a title="" href="?logout=1">Logout!</a> <?php break; case 2: ?> Eingeloggt in bereich 2!<br/> <a title="" href="?logout=1">Logout!</a> <?php break; } ?>
Ich weiß nicht wo dein Problem liegt, aber ich denke mit dem Script kommst du weiter.
Es könnte besser sein, aber ich denke es ist einfacher zu erweitern.
In die Einzelne bereiche kannst du jetzt natürlich auch Dateien Includen.
Grüsse
Color -
danke für die mühe ^^
sei mir nicht böse aber ich werde doch mein script jetzt nicht für deines über den haufen schmeißen xD
außerdem ähnelt dein schreibstil einer sauklaue zumindest ließ ich den extrem schwer, habs mir einfach anderst beigebracht
den fehler hab ich übrigends mitlerweile gefunden. bzw. die ursache, der fehler ist mir schleierhaft!
der fehler lag nicht an den sessions, sondern an einer in der index.php (weiter unten, viel weiter unten) includeten datei....
killer.php
<?PHP $datei = "timestamp.php"; $inhalt = file($datei); $nutzer = explode(";",$inhalt[0]); for($count=0;$count<count($nutzer);$count++){ $array = explode(":",$nutzer[$count]); if ($array[0]==$user){ $time = $array[1]; } } $now = time(); if($now>($time+60*60)){ $dif =($now-$time); $stunden = floor($dif/60/60); $rest = $dif-($stunden*60*60); } if($stunden>=1){ for($count=0;$count<$stunden;$count++){ $sql = mysql_fetch_array(mysql_query("SELECT * FROM $user where lev>0 order by RAND() LIMIT 1;")); $new = $sql['lev']-1; mysql_query("update $user SET lev='$new' WHERE id='$sql[id]'"); } if(!isset($_SESSION['level'])){ $_SESSION['level']=$stunden; } echo $_SESSION['level']; $timestampneu = $now-$rest; $text1[0] = str_replace($time,$timestampneu, $inhalt[0]); $text1[1] = $inhalt[1]; $text = implode("",$text1); $file = fopen("timestamp.php", "w+"); fwrite($file, $text); fclose($file); } else { if(!isset($_SESSION['level'])){ $_SESSION['level']="0"; } echo $_SESSION['level']; } ?>
ich hab die datei nun mehrfach "single" getestet und sie tut brav, schnell und ordentlich das was sie tun soll,
ich vermute mal das die mysql-schleife die fehlerquelle ist.
wobei da sich die timestamps um max. 1-2 stunden unterscheiden (forschleife 2mal ausführen) kann das ja wohl nicht ernsthaft das script lahmlegen...
ich verzweifel!
###EDIT:####
Also fehler lautete wie folgt:
$_SESSION['time']
wurde immer gleichbehandelt wie
$time
dadurch gabs seltsame überschneidungen und das script hat sich wohl öfters mal aufgehängt!
eines bleibt noch immer mysteriös, der internet explorer will die index.php nicht aufrufen. er scheitert noch an der header-weiterleitung in checkuser.php... (fuck off)
Beitrag zuletzt geändert: 8.11.2010 19:09:17 von losebettler1 -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage