kostenloser Webspace werbefrei: lima-city


session_start() oder dauerschleife?

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    losebettler1

    losebettler1 hat kostenlosen Webspace.

    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ß
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. 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
  4. Autor dieses Themas

    losebettler1

    losebettler1 hat kostenlosen Webspace.

    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
  5. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!