kostenloser Webspace werbefrei: lima-city


Session-Inhalt verschwindet

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    xxxparenjxxx

    xxxparenjxxx hat kostenlosen Webspace.

    Hallo,
    ich stehe mal wieder vor einem Problem, dessen Lösung bestimmt (mal wieder) ganz einfach ist.
    Jedoch blicke ich im moment garnicht mehr durch deswegen hier das Problem:
    Ich versuche ein Loginscript mit Sessions zu erstellen.
    Habe schon viel darüber gelesen, aber es will einfach nicht klappen. Folgender Code:

    if(isset($_POST["submit"])){
      if(isset($_POST["name"])  &&  isset($_POST["password"])){
        if(($_POST["name"]  ==  "test")  &&  ($_POST["password"]  ==  "123")){
          $user=  $_POST["name"];
          session_name("usr_login");
          $_SESSION["Username"] =  $user;
          $_SESSION["login"] =  true;
        }
        else{
          $_SESSION["login"] = false;
        }     
      }
    }

    Weiter unten gebe ich den ganzen Spaß aus:
    echo ("Hallo ".$user."!<br />\n");
      echo var_dump($_SESSION). "<br />\n";
      echo "<a href=login.php?" . session_name() . "=" . session_id() . ">SEITE NEU LADEN</a><br />\n";
      echo "<a href=login.php?>SEITE NEU LADEN- OHNE SID</a><br />\n";
      echo "<a href=index.php?" . session_name() . "=" . session_id() . ">STARTSEITE</a><br />\n";
      echo "<a href=index.php?>STARTSEITE- OHNE SID</a>";


    Am Anfang der Datei also noch vor dem <doctype> habe ich session_start() stehen.
    Wenn man sich jetzt einloggt wird der Username Ausgegeben. Es funktioniert scheinbar alles. Jedoch lädt man die Seite neu, verändert sich die session ID und der session_name springt wieder auf LCWSID. Habe auch schon hier gelesen dass das der Standart session_name ist auf lima-city. Nur wie bekomme ich meine Session dauerhaft registriert, also bis ich session_destroy o.Ä. aufrufe?
    Hier könnt Ihr euch das prob. anschauen:
    http://xxxparenjxxx.lima-city.de/login.php

    Vielen Dank für die Hilfe schonmal im Voraus.

    mfg, Michl
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

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

  3. Mit session_start() startest du bei einem erneuten Laden der Seite eine neue Session mit neuer SID.
    Baue dein session_start() hier ein:
    if(isset($_POST["name"])  &&  isset($_POST["password"])){
    .....


    Beitrag zuletzt geändert: 7.3.2013 7:48:09 von timebandit
  4. burgi

    Co-Admin Kostenloser Webspace von burgi

    burgi hat kostenlosen Webspace.

    timebandit schrieb:
    Mit session_start() startest du bei einem erneuten Laden der Seite eine neue Session mit neuer SID.

    Diese Aussage ist so unvollständig:
    session_start() erzeugt eine Session oder nimmt die aktuelle wieder auf, die auf der Session-Kennung basiert, die mit einer GET- oder POST-Anfrage oder mit einem Cookie übermittelt wurde.

    Nachzulesen hier

    Beitrag zuletzt geändert: 7.3.2013 8:22:39 von burgi
  5. Ich sehe in meinem Beitrag keinen echten Fehler, denn:
    Um eine benannte Session zu verwenden, rufen Sie session_name() auf, bevor Sie session_start() aufrufen.
    xxxparenjxxx verwendet am Scriptanfang nur session_start().
    Mein Vorschlag ist nur gewesen, dass eine neue Session nur gestartet wird, wenn Daten übermittelt wurden.

    Mfg,
    timebandit
  6. Warum eigentlich session_id() und / oder session_name() verändern und / oder ausgeben ???

    versuch es mals so


    <?php 
    // ------------------------------------------------- 
    
    error_reporting(E_ALL);
    ini_set("display_errors", 1);
    
    // ------------------------------------- 
    
    session_name("usr_login"); 
    
    session_start(); 
    
    // ------------------------------------- 
    
    $testdata['user'] = 'test'; 
    $testdata['pass'] = '123'; 
    
    $secret_salt = 'u5Rt2WnB4k'; 
    
    $check_key = md5($testdata['user'].$secret_salt.$testdata['pass']); 
    
    // ------------------------------------------------- 
    
    if (!empty($_POST['name']) && !empty($_POST['password'])) { 
    	
    	$user_name = trim($_POST['name']); 
    	$user_pass = trim($_POST['password']); 
    	
    	$login_key = md5($user_name.$secret_salt.$user_pass); 
    	
    	if ($login_key == $check_key) {  // ---- in Sessiion schreiben !!! 
    		$_SESSION['loginkey'] = $login_key; 
    		$_SESSION['username'] = $user_name; 
    	}
    	else { 
    		session_unset(); 
    		session_destroy(); 
    	} 
    
    } 
    
    // ------------------------------------------------- 
    
    if (!empty($_REQUEST['seite'])) { 
    	$run_seite = trim($_REQUEST['seite']); 
    } 
    else { 
    	$run_seite = 'start'; 
    } 
    
    // ------------------------------------------------- 
    
    if ($run_seite == 'logout') {   // ---- Sessiion loeschen !!! 
    	session_unset(); 
    	session_destroy(); 
    } 
    
    // ------------------------------------------------- 
    ?>
    
    <!doctype html>
    <html>
    <head>
    <meta name="TEST" content="test" />
    <link rel="stylesheet" type="text/css" href="css/style.css" />
    </head>
    
    <body>
    
    <p>--- <a href="?seite=start">HOME</a> --- </p>
    
    <?php 
    // ------------------------------------------------- 
    
    if (isset($_SESSION['loginkey']) && $_SESSION['loginkey'] == $check_key) { 
    
    // ------------------------------------------------- 
    ?>
    
    <p>&nbsp;</p>
    <p>Hallo USER: <strong><?php echo $_SESSION['username']; ?></strong> !!!</p>
    <p>&nbsp;</p>
    <p>Du bist jetzt eingeloggt .... </p>
    <p>&nbsp;</p>
    <p>--- <a href="?seite=start">HOME</a> --- <a href="?seite=logout" style="color:red;">LOGOUT</a> ---</p>
    <p>&nbsp;</p>
    
    <?php 
    // ------------------------------------------------- 
    
    print "<br />\n"; 
    print "<br />... DEBUG ... nach dem LOGIN ...\n"; 
    print "<br />\n";
    print "<br />Session ID: ". session_id() ."\n"; 
    print "<br />Session Name: ". session_name() ."\n"; 
    print "<br />\n"; 
    print "<br />_SESSION Daten: \n"; 
    print "<br />\n"; 
    print "<pre style=\"text-align:left; background:#DEDEDE;\">\n"; 
    print_r($_SESSION); 
    print "</pre>\n"; 
    
    print "<br />\n"; 
    print "<br />\n"; 
    
    }
    else { 
    
    // ------------------------------------------------- 
    ?>
    
    <p>&nbsp;</p>
    <p>Logge dich ein!</p>
    <p>&nbsp;</p>
    
    <form action="login.php" method="post" />
    	<p>Username: <input type="text" name="name" /></p>
    	<p>Passwort: <input type="password" name="password" /></p>
    	<p>OK: <input type="hidden" name="seite" value="start" /> 
    	<input type="submit" name="submit" value="Einloggen" /></p>
    </form>
    
    <p>&nbsp;</p>
    
    <?php 
    // ------------------------------------------------- 
    
    print "<br />\n"; 
    print "<br />... DEBUG ... vor dem LOGIN ...\n"; 
    print "<br />\n";
    print "<br />Session ID: ". session_id() ."\n"; 
    print "<br />Session Name: ". session_name() ."\n"; 
    print "<br />\n"; 
    print "<br />_SESSION Daten: \n"; 
    print "<br />\n"; 
    print "<pre style=\"text-align:left; background:#DEDEDE;\">\n"; 
    print_r($_SESSION); 
    print "</pre>\n"; 
    
    print "<br />\n"; 
    print "<br />\n"; 
    
    }
    
    // ------------------------------------------------- 
    ?>
    
    <p>&nbsp;</p>
    
    </body>
    
    </html>


    wobei ich die Zeile:
    session_name("usr_login");
    ganz weg lassen würde

    und keine die Session-ID in den Links machen ... der Browser weiss schon selbst welche :)




    Beitrag zuletzt geändert: 7.3.2013 8:40:10 von webmag
  7. Autor dieses Themas

    xxxparenjxxx

    xxxparenjxxx hat kostenlosen Webspace.

    Hallo, danke für ere Antworten.
    Habe mal alles was ihr vorgeschlagen habt ausprobiert. es geht trotzdem nicht.
    session_name() vor session_start() hatte ich vorher auch schonmal probiert hat nichts genützt.

    @ webmag:
    Habe mal deinen code, so wie der dasteht mal reinkopiert.
    Aber leider ist hier genau das selbe Ergebnis.
    Wenn man die Seite neu lädt verschwindet der Session-Inhalt bzw. die SESSION Daten.

    Müsste der bei einem Start einer Session nicht auch automatisch einen cookie setzen? (Sofern die nicht abgeschaltet sind.)

    mfg, Michl
  8. Hallo

    also ich habe den Code auch getestet, und bei mir funktioniert er.


    Bei (Standard)
    session_start();
    wird automatisch ein SESSION Cookie gesetzt,
    das Cookie muss man dann nicht nochmal extra selber setzten.

    vielleicht must Du im Browser einstellen, das SESSION Cookies akzeptiert werden.
    keine Ahnung wo die Einstellung ist .... bei mir geht's ... im FF und im IE

    sonst - wenn ohne Cookies - kannst Du einen verschlüsselten String (z.B. $check_key)
    in den Links als Parameter übergeben und dann anstatt $_SESSION mit $_GET prüfen,

    damit der Parameter auch schon direkt nach Login (mit POST) in der URL steht,
    kannst Du bei erfolgreichem Login mit header() auf entsprechende URL umleiten

    <?php
    // -------------------------------------------------
    
    error_reporting(E_ALL);
    ini_set("display_errors", 1);
    
    $runfile = $_SERVER["PHP_SELF"]; 
    ## $runfile = 'login.php'; 
    
    // -------------------------------------
    
    $testdata['user'] = 'test';
    $testdata['pass'] = '123';
    
    $secret_salt = 'u5Rt2WnB4k';
    
    $check_key = md5($testdata['user'].$secret_salt.$testdata['pass']);
    
    // -------------------------------------------------
    
    if (!empty($_POST['name']) && !empty($_POST['password'])) {
    	
    	$user_name = trim($_POST['name']);
    	$user_pass = trim($_POST['password']);
    	
    	$login_key = md5($user_name.$secret_salt.$user_pass);
    	
    	if ($login_key == $check_key) { 
    		header('location: '.$runfile.'?xusr='.$check_key.''); 
    	}
    	else {
    		print "<p>Die Zugangsdaten sind falsch !!!</p>\n"; 
    	}
    
    }
    
    // -------------------------------------------------
    
    if (!empty($_GET['xusr'])) {
    	$run_xusr = trim($_GET['xusr']);
    }
    else {
    	$run_xusr = '';
    }
    
    // -------------------------------------------------
    
    if (!empty($_REQUEST['seite'])) {
    	$run_seite = trim($_REQUEST['seite']);
    }
    else {
    	$run_seite = 'start';
    }
    
    // -------------------------------------------------
    
    if ($run_seite == 'logout') {   // ---- Sessiion loeschen !!!
    	$run_xusr = ''; 
    	header('location: '.$runfile.'?xusr=logout'); 
    	exit; 
    }
    
    // -------------------------------------------------
    ?>
    
    <!doctype html>
    <html>
    <head>
    <meta name="TEST" content="test" />
    <link rel="stylesheet" type="text/css" href="css/style.css" />
    </head>
    
    <body>
    
    <p>--- <a href="?seite=start">HOME</a> --- </p>
    
    <?php
    // -------------------------------------------------
    
    if (!empty($run_xusr) && $run_xusr == $check_key) {
    
    // -------------------------------------------------
    ?>
    
    <p>&nbsp;</p>
    <p>Hallo USER: <strong><?php echo $testdata['user']; ?></strong> !!!</p>
    
    <p>&nbsp;</p>
    <p>Du bist jetzt eingeloggt .... Aktuelle Seite: <strong><?php echo $run_seite; ?></strong></p>
    <p>&nbsp;</p>
    
    <?php 
    // -------------------------- 
    
    print '<p>'; 
    print ' --- <a href="'.$runfile.'?seite=start&xusr='.$check_key.'">HOME</a>'; 
    print ' --- <a href="'.$runfile.'?seite=blabla&xusr='.$check_key.'">BlaBla</a>'; 
    print ' --- <a href="'.$runfile.'?seite=logout" style="color:red;">LOGOUT</a>'; 
    print ' ---'; 
    print '</p>' . "\n"; 
    
    // -------------------------- 
    ?>
    
    <p>&nbsp;</p>
    
    <?php 
    // ------------------------------------------ 
    
    $inc_seite = 'seiten/'.$run_seite.'.php'; 
    
    if (file_exists($inc_seite)) { 
    	include_once($inc_seite); 
    }
    else { 
    	print '<p> ... keine Seite zur Anfrage: <strong>'.$run_seite.'</strong> gefunden</p>' . "\n"; 
    }
    
    // ------------------------------------------ 
    ?>
    
    <p>&nbsp;</p>
    
    
    <?php
    // -------------------------------------------------
    
    }
    else {
    
    // -------------------------------------------------
    ?>
    
    <p>&nbsp;</p>
    <p>Logge dich ein!</p>
    <p>&nbsp;</p>
    
    <form action="<?php echo $runfile; ?>" method="post">
    	<p>Username: <input type="text" name="name" /></p>
    	<p>Passwort: <input type="password" name="password" /></p>
    	<p>OK: <input type="hidden" name="seite" value="start" />
    	<input type="submit" name="submit" value="Einloggen" /></p>
    </form>
    
    <p>&nbsp;</p>
    
    <?php
    // -------------------------------------------------
    
    }
    
    // -------------------------------------------------
    ?>
    
    <p>&nbsp;</p>
    
    </body>
    
    </html>



    Diesen $check_key kann man bestimmt auch noch "sicherer" machen,
    aber für erste Test-Versuche sollte dieser md5-hash ausreichend sein.

  9. Autor dieses Themas

    xxxparenjxxx

    xxxparenjxxx hat kostenlosen Webspace.

    Hallo,

    also bei mir werden Cookies deffinitiv akzeptiert. Von anderen Internetseiten werden die ja auch gespeichert.

    Wenn ich die Seite aufrufe Spuckt der mir noch sowas hier aus:



    Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at /home/webpages/lima-city/xxxparenjxxx/html/TESTPAGE/login.php:1) in /home/webpages/lima-city/xxxparenjxxx/html/TESTPAGE/login.php on line 11

    Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /home/webpages/lima-city/xxxparenjxxx/html/TESTPAGE/login.php:1) in /home/webpages/lima-city/xxxparenjxxx/html/TESTPAGE/login.php on line 11



    Wie es aussieht schafft er es nicht sachen in die Session zu schreiben.
    Das kommt bei IE und bei FF.
    Werde jetzt trotzdem mal rumsuchen, ob ich diese Session-Cookies doch irgendwo blokiert habe (dürfte aber nicht sein....)

    *edit
    Habe nochmal nachgeschaut. Hier sind meine Cookie-Einstellungen:
    http://www.fotos-hochladen.net/view/cookiesztfhiyn5cu.png

    mfg, Michl

    Beitrag zuletzt geändert: 7.3.2013 14:46:27 von xxxparenjxxx
  10. h**s

    hi,

    diese fehlermeldung ist ja ein anzeichen dafür das schon irgendeine ausgabe vor dem session_start() passierte... überprüfe dienen code daraufhin das session_start() als allererstes notiert ist.

    p.s. selbst wenn cookies blockiert wären würde php versuchen die sessionid als transparenten get-parameter zu übertragen...

    Beitrag zuletzt geändert: 7.3.2013 14:48:21 von hcms
  11. Autor dieses Themas

    xxxparenjxxx

    xxxparenjxxx hat kostenlosen Webspace.

    hallo,
    ja hattest recht session_start war nicht ganz am Anfang.
    Jetzt sind die Fehlermeldungen zwar weg, aber trotzdem scheint das ganze nicht so ganz zu funktionieren.
    Nach dem Einloggen wird mir der username also der loginname ausgegeben.
    Nach dem Neuladen der Seite muss ich mich aber wieder neu einloggen -.-

    mfg, Michl
  12. if (!empty($_SESSION['username'] ))
     { unterbinde erneutes Logging}
    else {neues Log-In starten}

    hier mal ein Vorschlag mit Pseudocode.

    Mfg,
    timebandit
  13. h**s

    Also hier mal ein minimales Beispiel:
    <?php
    	session_start();
    	
    	if(isset($_POST['name'],$_POST['password'])) {
    		if($_POST['name']=='test' and $_POST['password']=='123') {
    			$_SESSION['username'] = $_POST['name'];
    		}
    	}
    ?>
    <!DOCTYPE html>
    <html lang="de">
        <head>
            <meta charset="utf-8">
            <title>SESSION</title>
        </head>
        <body>
        	<?php
    			if(isset($_SESSION['username'])) {
    				echo '<p>Hallo '.htmlentities($_SESSION['username']).'.</p>';
    			}else {
    				?>
    					<p>Bitte melden Sie sich an.</p>
    					<form method="post">
    						<p><input type="text" name="name"></p>
    						<p><input type="password" name="password"></p>
    						<p><input type="submit"></p>
    					</form>
    				<?php
    			}
    			
    			echo '<br><br><br><br><br><div style="background-color:#FFD;padding:10px;"<p><u>debug:</u></p>';
    			echo '<p>session_id: '.session_id().'</p>';
    			echo '<p>$_POST: </p>';
    			print_r($_POST);
    			echo '<p>$_SESSION: </p>';
    			print_r($_SESSION);
    			echo '</div>';
    		?>
        </body>
    </html>
    kannst du hier testen: http://hcms.12hp.at/session/
  14. Autor dieses Themas

    xxxparenjxxx

    xxxparenjxxx hat kostenlosen Webspace.

    Hallo,
    also jetzt weiß ich auch nicht woran das noch liegen kann.
    Am code scheinbar ja nicht.
    Hab den von hcms jetzt reinkopiert und der funzt bei mir auch nicht.
    Nach dem neuladen muss ich mich schon wieder neu einloggen.
    Wen ihr es nicht glaubt probierts hier bitte aus. ich kan mir ned helfen -.-
    http://xxxparenjxxx.lima-city.de/login.php
    Werde es gleich mal noch am laptop meiner Freundin ausprobieren ob es da geht.

    mfg, Michl
  15. h**s

    also das ist ja sehr seltsam... :confused:

    der code den ich genauso unter der o.g. adresse geladen hab funktioniert.
    der code unter der von dir angegebenen adresse nicht.

    hast du eine .htaccess am start ?

    Beitrag zuletzt geändert: 7.3.2013 17:24:56 von hcms
  16. Autor dieses Themas

    xxxparenjxxx

    xxxparenjxxx hat kostenlosen Webspace.

    hcms schrieb:
    hast du eine .htaccess am start ?


    Sry.
    keine Ahnung von .htaccess.
    werde mir gleich mal was darüber durchlesen.

    mfg, Michl
  17. Verwende als User: test
    als Passwort: 123

    Siehe entsprechendes JPG

    Beitrag zuletzt geändert: 7.3.2013 18:26:52 von timebandit
  18. Autor dieses Themas

    xxxparenjxxx

    xxxparenjxxx hat kostenlosen Webspace.

    timebandit schrieb:
    Verwende als User: test
    als Passwort: 123

    Siehe entsprechendes JPG


    Und wie soll mir das bei der Lösung des problems helfen?

    hcms schrieb:

    hast du eine .htaccess am start ?


    habe keine .htaccess aber ich wüsste jetzt nach dem lesen auch nicht was ich in die reinschreiben sollte damit mein problem behoben wird -.- sry
  19. h**s

    ne, hätte ja sein können das du eine hast und dort irgendwie das problem zu finden ist (wieterleitungen, cache, etc.)...

    @ timebandit:
    aus deinem bild kann man erkennen das die erstmalige anmeldung funktioniert (name/pass noch im post). toll. es geht aber darum das ein reload der page danach eigentlich die session beibehalten sollte, bei xxxparenjxxx aber eine neue session gestartet wird.
  20. Wenn es nicht an einer .htaccess liegt, dann könnte noch
    magic_quotes_gpc eine Rolle spielen.
    Beim Einrichten deines Webspaces diese Konfiguration aktiviert?

    Mfg,
    timebandit
  21. Autor dieses Themas

    xxxparenjxxx

    xxxparenjxxx hat kostenlosen Webspace.

    timebandit schrieb:
    Wenn es nicht an einer .htaccess liegt, dann könnte noch
    magic_quotes_gpc eine Rolle spielen.
    Beim Einrichten deines Webspaces diese Konfiguration aktiviert?

    Mfg,
    timebandit


    Also wenn ich in die phpinfo von lima-city reinschaue, steht da drinn dass magic_quotes_gpc off ist.
    Muss ich etwas beachten wenn sie deaktiviert sind? ich dachte man müsse nur htmlspecialchars und stripslashes verwenden wenn magic_quotes_gpc on ist. Oder liege ich da falsch?

    mfg, Michl

    Beitrag zuletzt geändert: 7.3.2013 21:20:33 von xxxparenjxxx
  22. 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!