php.de

Zurück   php.de > Webentwicklung > PHP-Fortgeschrittene

PHP-Fortgeschrittene Arbeiten mit PHP ohne Einschränkungen

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 22.07.2005, 00:00  
Gast
 
Beiträge: n/a
Standard [Erledigt] Login klappt nicht korrekt

Hallo

Ich hab da ein Problem mit meinem Loginscript.
Und zwar kann ich mit ihm wunderbar einloggen. Die SessionID wird in der datenbank gespeichert und ich komme auch auf alle meine geschützten seiten.
Benutze ich den logout Link kann ich auch danach wieder ohne probleme einloggen.
Allerdings wenn ich den Browser schliesse ohne mich vorher ausgeloggt zu haben hab ich trotz login keinerlei chance auf meine geschützten seiten zu gelangen.
Das geht erst wieder wenn ich mich mit dem logout link auslogge und neu einlogge.

Ich kann das ganze nicht ganz nachvollziehen, da die sessionID bei jedem login neu in die datenbank geschrieben wird und eigentlich das kein problem machen sollte.
ich hoffe ihr habt da ein paar tipps oder findet den felher in meinem script.

Das Login Script:
PHP-Code:
<? 
session_start
(); 
include 
'sessionhelpers.inc.php'

if (isset(
$_POST['login'])) 

    
$userid=check_user($_POST['username'], $_POST['userpass']); 
    if (
$userid!=false
        
login($userid); 
    else 
        echo 
'Ihre Anmeldedaten waren nicht korrekt!'

if (!
logged_in()) 
    echo 
'<form method="post" action="login.php">
  <div align="center">
    <label></label>
    <font size="2" face="Verdana, Arial, Helvetica, sans-serif"> 

    </font>
    <table width="99%" border="0">
      <tr> 
        <td><div align="center"><font size="2" face="Verdana, Arial, Helvetica, sans-serif">User:</font></div></td>
      </tr>
      <tr> 
        <td><div align="center"><font size="2" face="Verdana, Arial, Helvetica, sans-serif"> 
            <input name="username" type="text">
            </font></div></td>
      </tr>
      <tr> 
        <td><div align="center"><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Password:</font></div></td>
      </tr>
      <tr> 
        <td><div align="center"><font size="2" face="Verdana, Arial, Helvetica, sans-serif"> 
            <input name="userpass" type="password" id="userpass2">
            </font></div></td>
      </tr>
      <tr> 
        <td><div align="center"><font size="2" face="Verdana, Arial, Helvetica, sans-serif"> 
            <input name="login" type="submit" id="login2" value="Sign in">
            </font></div></td>
      </tr>
    </table>
    <font size="2" face="Verdana, Arial, Helvetica, sans-serif">
    <label></label>
    

    </font> </div>
</form>'

else 

    echo 
'[url="logout.php"]Ausloggen[/url]'
echo 
'

[url="forgot.php"]forgot password?[/url]'

echo 
'

[url="register.php"]Register[/url]'

?>

Sessionhelpers.inc.php
PHP-Code:
<? 
function connect() 

    
$conmysql_connect('localhost','.......','.......') or die(mysql_error()); 
     
mysql_select_db('......',$con) or die(mysql_error()); 


function 
check_user($name$pass

    
$sql="SELECT UserId 
    FROM users 
    WHERE UserName='"
.$name."' AND UserPass=MD5('".$pass."') AND active='1'
    LIMIT 1"

    
$resultmysql_query($sql) or die(mysql_error()); 
    if ( 
mysql_num_rows($result)==1
    { 
        
$user=mysql_fetch_assoc($result); 
        return 
$user['UserId']; 
    } 
    else 
        return 
false


function 
login($userid

       
    
$sql="UPDATE users 
    SET UserSession='"
.session_id()."' 
    WHERE UserId="
.$userid
     
mysql_query($sql); 


function 
logged_in() 

    
$sql="SELECT UserId 
    FROM users 
    WHERE UserSession='"
.session_id()."' 
    LIMIT 1"

    
$resultmysql_query($sql); 
      return ( 
mysql_num_rows($result)==1); 


function 
logout() 

    
$sql="UPDATE users 
    SET UserSession=NULL 
    WHERE UserSession='"
.session_id()."'"
     
mysql_query($sql); 


connect(); 
?>

Geschützte Seite:
PHP-Code:
<? session_start(); 
  
include 
'sessionhelpers.inc.php'
 
if (!
logged_in()) {
    echo 
'Sie sind nicht eingeloggt'
} else {
... 
Inhalt
...
}
?>
Logout Script:
PHP-Code:
<? session_start(); 
include 
'sessionhelpers.inc.php'
logout(); 
echo 
'Sie sind '
if (!
logged_in()) 
    echo 
'nicht mehr'
echo 
'eingeloggt.< p/>'
echo 
'[url="login.php"]Einloggen[/url]'

?>
  Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 22.07.2005, 00:04  
Erfahrener Benutzer
 
Registriert seit: 02.04.2008
Beiträge: 2.603
Corvin befindet sich auf einem aufstrebenden Ast
Standard

Eine Session ist (höchstens) so lange gültig, bis der Browser geschlossen wird. Wenn du trotz des Browserschliessens eingeloggt bleiben willst, musst du Cookies verwenden.
http://tut.php-q.net/cookies.html
http://www.php.net/manual/de/features.cookies.php
http://www.php.net/manual/de/function.setcookie.php
Corvin ist offline   Mit Zitat antworten
Alt 22.07.2005, 00:06  
Gast
 
Beiträge: n/a
Standard

NE das möcht ich ja garnicht.
Das die Session beendet ist wenn ich den Browser schliesse ist mir klar und auch gewollt.

ABER wenn ich den Browser schliesse ohne ein Logout zu machen kann ich mich danach nicht wieder anmelden.
DAS ist das problem.
  Mit Zitat antworten
Alt 22.07.2005, 00:14  
Erfahrener Benutzer
 
Registriert seit: 02.04.2008
Beiträge: 2.603
Corvin befindet sich auf einem aufstrebenden Ast
Standard

Achso... jo guck ich mir morgen mal an, ich gehe jetzt erstmal schlafen.
Corvin ist offline   Mit Zitat antworten
Alt 22.07.2005, 00:16  
Gast
 
Beiträge: n/a
Standard

eine angenehme nachruhe
  Mit Zitat antworten
Alt 22.07.2005, 10:43  
Erfahrener Benutzer
 
Registriert seit: 02.04.2008
Beiträge: 2.603
Corvin befindet sich auf einem aufstrebenden Ast
Standard

So, weil ich auf den ersten Blick keinen Fehler gefunden habe, habe ich das ganze mal ausprobiert (mit TestDB), ich habe aber keine Probleme. Ich kann mich einloggen und den geschützten Bereich aufrufen. Wenn ich den Browser schließe oder wieder öffne, kann ich das natürlich nicht mehr, aber ein erneutes einloggen genügt, ich muss nicht erst auf ausloggen klicken.
Ich habs mit dem Firefox (1.0.6) und dem IE getestet.
Corvin ist offline   Mit Zitat antworten
Alt 22.07.2005, 11:55  
Gast
 
Beiträge: n/a
Standard

ERstmal ein dickes Danke für deine Mühe die du dir damit machst.

Komisch ist das allerdings. ICh habe die drei scripte "login, sessionhelpers und logout" jetzt auch mal einzeln getestet und da funktioniert alles einbandfrei.

Hab ich sie aber als Frame in meiner Homepage klappts nicht.
Sehr komisch da die .php Dateien nicht verändert sind, sonden lediglich als Frame eingebunden.
  Mit Zitat antworten
Alt 22.07.2005, 16:10  
Benutzer
 
Registriert seit: 28.02.2005
Beiträge: 30
Rio99
Standard

Nur mal so ein Tipp am Rande: Bevor man das Script online stellt würde ich mir mal gedanken über die Sicherheit machen Man könnte das Script ohne Probleme umgehen.

So sollte dein Query eigentlich aussehen:

Code:
$sql="SELECT UserId 
    FROM users 
    WHERE UserName='".mysql_escape_string($name)."' AND UserPass=MD5('".$pass."') AND active='1'
    LIMIT 1";
Rio99 ist offline   Mit Zitat antworten
Alt 22.07.2005, 17:07  
Gast
 
Beiträge: n/a
Standard

Ich hab den Fehler gefunden. Es war nicht in allen scripts das session_start() an erster stelle ... *KopfandieWandknall*

@Rio99 in wie fern kann man das denn umgehen? und was bewirkt "mysql_escape_string" ?
  Mit Zitat antworten
Alt 22.07.2005, 20:28  
Gast
 
Beiträge: n/a
Standard

@timo75
Man kann, wenn man sich ein bisschen mühe macht, durch geschickte Eingaben, die an dein Skript übergeben werden (über dein Loginformular) deine MySQL-Abfrage umschreiben.

Dadurch kann man die so verfälschen, dass eine Bedingung entsteht, die immer true ist. Du wirst also immer eingeloggt....

Dies nennt man SQL-Injection

mysql_escape_string() filtert aus dem übergebenen String jegliche MySQL-Syntax raus.

Für genauere Infos und für Beispiele:
http://www.php.net/manual/de/securit...-injection.php
http://www.php.net/manual/de/functio...ape-string.php
  Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
[Erledigt] Login erstellen coraplanet PHP Tipps 2008 33 21.04.2008 16:49
Forum Login per curl leb0rtran PHP Tipps 2008 1 19.03.2008 12:47
Etwas komplexerer Login --> Keine Angst, Suche benutzt dethlef14 PHP Tipps 2006 7 02.10.2006 00:35
.htaccess Login über HTML Login Felder gestalten php1 PHP-Fortgeschrittene 2 09.08.2006 13:53
Session Logout Login Navigation TailerD PHP Tipps 2006 10 24.06.2006 17:12
Frage zu Login Kein Genie PHP Tipps 2006 5 16.06.2006 12:34
Suche Login Script PHP Tipps 2006 6 02.03.2006 11:09
phpBB Loginscript in eigenes Login Script einbinden 2wuck PHP Tipps 2007 4 19.12.2005 23:10
Problem mit Login Script PHP Tipps 2007 4 15.11.2005 17:29
problem mit login PHP Tipps 2005-2 11 28.10.2005 14:10
LOGIN PHP Tipps 2005-2 8 02.09.2005 13:18
[Erledigt] Login, LogIn, Anmelden, Einloggen -&amp;amp;amp;amp;gt; ??? Off-Topic Diskussionen 20 14.07.2005 11:01
[Erledigt] Windows XP Login Namen verwenden? PHP-Fortgeschrittene 14 17.03.2005 15:37
login mit session id PHP Tipps 2005 10 26.01.2005 12:32
login überprüfung PHP Tipps 2004 7 23.08.2004 11:21

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
sessionhelpers.inc.php\\\', <label><p>passwort:</p> </label><input pass=\userpass\, login php korrekt

Alle Zeitangaben in WEZ +2. Es ist jetzt 22:01 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.