Logo - MyWebsolution.de
User gesamt  :  1651462
User online  :  1
KubaSeoTräume, PHP Forum, PHP Community and more ... MyWebsolution.de!
   
   
 
Registrieren Login User F.A.Q Suche Home

eingeloggt bleiben

MyWebsolution.de Foren » Workshops » Profil-bearbeiten funktioniert nicht!!!

Seite: 1 Posts pro Seite: 5 10 20
Autor Thread
18.02.2007 20:28 Uhr Profil-bearbeiten funktioniert nicht!!!
ScorpionX
User
 
registriert 18.02.2007
wohnt in
Beiträge 4
Hallo, also ich habe ein kleines Problem...

Und zwar, wenn ich mich auf meiner seite einlogge dann sehe ich zwar mein benutzermenu aber wenn ich profil bearbeiten möchte dann steht da:
"sind sind nicht eingeloggt.
Gehen sie zurück zur Startseite."

hier der code :
PHP:

<?php
session_start
();

error_reporting(E_ALL);

    
//sql daten

   
if(!isset($_SESSION['UserID'])) {
         echo 
"Sie sind nicht eingeloggt.<br>\n".
              
"Bitte <a href=\"login.php\">loggen</a> Sie sich zuerst ein.\n";
    }
    else{

         
$sql "SELECT
                         Nickname,
                         Email,
                         Show_Email,
                         Wohnort,
                         Homepage,
                         ICQ,
                         MSN,
                         Avatar
                 FROM
                     User
                 WHERE
                     ID = '"
.mysql_real_escape_string($_SESSION['UserID'])."'
                "
;
...
?>


ich hoffe ihr könnt mir helfen
Profil ansehen
18.02.2007 22:41 Uhr
Negura
Forenposter
 
registriert 06.12.2006
wohnt in
Beiträge 57
Hallo,

also dein code sagt mir nichts bzw. woher soll ich wissen wo bei dir der Fehler liegt. :oO:

Ich würde dir empfehlen, in deine User Tabelle eine Spalte user_session als varchar hinzuzufügen. Durch session_start(); wird jedem Benutzer der das Script aufruft eine session_id zugeteilt, diese wird es zerstört, wenn du dein Browser schließt und dann wieder öffnest.

Folgt könntest du bei einer erfolgreichen Authentifizierung des Benutzers die session_id in die Datenbank schreiben und über diese dann prüfen ob der Benutzer noch angemeldet ist. Sollte der Benutzer sich abmelden schreibst du einfach NULL in die Datenbank.

Prüfung:
PHP:
if(session_id() == $row['user_session']){
 ....
}


Du solltest aber nie vergessen regelmäßig - bei jedem script - zu prüfen ob der benutzer noch angemeldet ist, die datenbank sollte ebenfalls immer aktualisiert werden. Wenn die session_id noch in der Datenbank steht, der Benutzer allerdings vor drei Tagen das letzte mal da war und du nur über
PHP:

if(isset($row['user_session'])){
 ...
}

prüfst, wäre der Benutzer trotzdem angemeldet.

Naja, mehr kann ich mit deinen Angaben nicht helfen. :rolleyes:

Gruß Negura
Profil ansehen
18.02.2007 23:37 Uhr
ScorpionX
User
 
registriert 18.02.2007
wohnt in
Beiträge 4
hmmm danke erstmal...

Also poste ich den Code nochmal, diesmal (hoffentlich) den Richtigen:

PHP:
<?php
session_start
();

//SQL Daten

// Loggt einen User ein, ..
                    
function doLogin($ID$Autologin=false)
                    {
                        
// .. indem die aktuelle Session ID in der Datenbank gespeichert wird
                        
$sql "UPDATE
                                        User
                                SET
                                        SessionID = '"
.mysql_real_escape_string(session_id())."',
                                        Autologin = NULL,
                                        IP = '"
.$_SERVER['REMOTE_ADDR']."',
                                        Letzte_Aktion = '"
.mysql_real_escape_string(time())."',
                                        Letzter_Login = '"
.mysql_real_escape_string(time())."'
                                WHERE
                                        ID = '"
.$ID."'
                                "
;
                        
mysql_query($sql) OR die("<pre>\n".$sql."</pre>\n".mysql_error());
                        
// Wenn 'eingeloggt bleiben' aktiviert wurde
                        
if($Autologin){
                            
// Zufallscode erzeugen
                            
$part_one substr(time()-rand(100100000),5,10);
                            
$part_two substr(time()-rand(100100000),-5);
                            
$Login_ID md5($part_one.$part_two);
                            
// Code im Cookie speichern, 10 Jahre dürfte genügen
                            
setcookie("Autologin"$Login_IDtime()+60*60*24*365*10 );
                            
$sql "UPDATE
                                            User
                                    SET
                                            Autologin = '"
.$Login_ID."'
                                    WHERE
                                            ID = '"
.$ID."'
                                   "
;
                            
mysql_query($sql) OR die("<pre>\n".$sql."</pre>\n".mysql_error());
                        }
                
                        
// Daten des Users in der Session speichern
                        
$sql "SELECT
                                        Nickname
                                FROM
                                        User
                                WHERE
                                        ID = '"
.$ID."'
                               "
;
                        
$result mysql_query($sql) OR die("<pre>\n".$sql."</pre>\n".mysql_error());
                
                        
$row mysql_fetch_assoc($result);
                        
$_SESSION['UserID'] = $ID;
                        
$_SESSION['Nickname'] = $row['Nickname'];
                    }

                    
//Session starten

                        
if(isset($_POST['submit']) AND $_POST['submit']=='Einloggen'){
                        
// Falls der Nickname und das Passwort übereinstimmen..
                        
$sql "SELECT
                                        ID
                                FROM
                                        User
                                WHERE
                                        Nickname = '"
.mysql_real_escape_string(trim($_POST['Nickname']))."' AND
                                        Passwort = '"
.md5(trim($_POST['Passwort']))."'
                               "
;
                        
$result mysql_query($sql) OR die("<pre>\n".$sql."</pre>\n".mysql_error());
                        
// wird die ID des Users geholt und der User damit eingeloggt
                        
$row mysql_fetch_assoc($result);
                        
// Prüft, ob wirklich genau ein Datensatz gefunden wurde
                        
if (mysql_num_rows($result)==1){
                             
doLogin($row['ID'], isset($_POST['Autologin']));
                             echo 
"<h4>Willkommen ".$_SESSION['Nickname']."</h4>\n";
                             echo 
"Sie wurden erfolgreich eingeloggt.<br>\n\n";
                             echo 
"<br>";
                             echo 
"<a href=\"logout.php\" target='content-iframe'>Ausloggen</a>\n\n";
                             echo 
"<br>";
                             echo 
"<a href=\"profil_bearbeiten.php\" target='content-iframe'>Profil bearbeiten</a>\n\n";
                             echo 
"<br>";
                             echo 
"<a href=\"Userliste.php\" target='content-iframe'>Userliste</a>\n\n";
                             echo 
"<br>";
                             echo 
"<a href=\"Userliste.php\" target='content-iframe'>Userliste</a>\n\n";
                        }
                        else{
                             echo 
"Sie konnten nicht eingeloggt werden.<br>\n".
                                  
"Nickname oder Passwort fehlerhaft.<br>\n".
                                  
"Zurück zum <a href=\"".$_SERVER['PHP_SELF']."\">Login-Formular</a>\n";
                        }
                    }
                else{
                    echo 
"<form ".
                         
" name=\"Login\" ".
                         
" action=\"".$_SERVER['PHP_SELF']."\" ".
                         
" method=\"post\" ".
                         
" accept-charset=\"ISO-8859-1\">\n";
                    echo 
"<table width='45px' valign='top'>";
                    echo 
"<tr><th>Nickname:\n</th>";
                    echo 
"<th><input type=\"text\" name=\"Nickname\" maxlength=\"32\">\n</th></tr>";
                    echo 
"<br>\n";
                    echo 
"<tr><th>Passwort:\n</th>";
                    echo 
"<th><input type=\"password\" name=\"Passwort\">\n</th></tr>";
                    echo 
"<br>\n";
                    echo 
"<tr><th colspan='2'>eingeloggt bleiben :\n";
                    echo 
"<input type=\"checkbox\" name=\"Autologin\" value=\"1\">\n</th></tr>";
                    echo 
"<br>\n";
                    echo 
"<tr><th colspan='2'><input type=\"submit\" name=\"submit\" value=\"Einloggen\">\n</th></tr>";
                    echo 
"<br>\n";
                    echo 
"<tr><th colspan='2'><a href=\"passwort.php\"><u>Passwort vergessen</u></a> oder noch nicht <a href=\"Formular.php\"><u>registriert</u></a>?\n</th></tr></table>";
                    echo 
"</form>\n";
                }
?> 


EDIT:Also ich sehe keine Fehler mit Session, aber wo ich ein Fehler sehe ist bei
setcookie(...) oder? muss setcookie nicht immer nach <?php stehen?
aber dann würde das ja mit dem häkchen nicht funktionieren!

danke für eure hilfe schon im vorraus

Dieser Beitrag wurde am 18.02.2007 um 23:45:46 Uhr von ScorpionX zum 1. Mal editiert.
Profil ansehen
19.02.2007 01:05 Uhr
Flitze
Administrator
registriert 17.10.2006
wohnt in Eschwege
Beiträge 332
Hey,

also zunächst wärs mal sinnvoll, wenn du

PHP:
<?php
echo "<pre>\n";
var_dump($_SESSION);
echo 
"</pre>\n";
?>


ausgeben lässt. Damit "siehst" du erstmal, was überhaupt in der Session drin steht.
Wenn da kein Fehler auftritt, prüfst du mit session_id(); ob du bei jedem Seitenaufruf auch die gleiche Session ID hast, denn wenn die Session ID wechselt, bleiben die Daten ja nicht erhalten.

Außerdem mal überprüfen, ob dein Browser Cookies akzeptiert..

Zitat:
EDIT:Also ich sehe keine Fehler mit Session, aber wo ich ein Fehler sehe ist bei
setcookie(...) oder? muss setcookie nicht immer nach <?php stehen?
aber dann würde das ja mit dem häkchen nicht funktionieren!

danke für eure hilfe schon im vorraus


Also wenn ich dich richtig verstehe, dann meinst du, dass setcookie() am Anfang des Scriptes stehen soll?

Das muss nicht sein. Nen Cookie wird mit Hilfe eines HTTP Headets gesetzt, deshalb darf vor dem Aufruf von setcookie() kein Header gesendet worden sein, wie z.B. eine Textausgabe auf dem Bildschirm. Wenn es Probleme mit den Funktionen gibt, dann müsste eigentlich auch eine dementsprechende Fehlermeldung kommen (Headers already sent..). Um das zu prüfen würde ich auch mal error_reporting(E_ALL); an den Anfang des Scriptes schreiben, damit auch eventuelle Notices angezeigt werden.

Insgesamt hat der Autologin mit dem "eingeloggt sein" erstmal nichts zu tun, deshalb kann es eigentlich nicht daran liegen..

Ich schätze, dass es an den Sessiondaten liegt, also das die aus irgendnem Grund nicht übergeben werden..


Profil ansehen Mail senden
20.02.2007 15:44 Uhr
ScorpionX
User
 
registriert 18.02.2007
wohnt in
Beiträge 4
ich gebe euch mal den link und ihr könnt euch das ja anguggen!

LINK

ihr könnt euch auch registrieren damit ihr das mal sieht!

ganz unten siehst auch was der session ausgibt!

danke für eure hilfe
Profil ansehen
20.02.2007 20:46 Uhr
Flitze
Administrator
registriert 17.10.2006
wohnt in Eschwege
Beiträge 332
steht am Anfang jedes Scriptes session_start(); ?


Profil ansehen Mail senden
20.02.2007 21:43 Uhr
ScorpionX
User
 
registriert 18.02.2007
wohnt in
Beiträge 4
ja
Profil ansehen
21.02.2007 00:57 Uhr
Flitze
Administrator
registriert 17.10.2006
wohnt in Eschwege
Beiträge 332
dann mach mal die testausgaben mit

PHP:
<?php
echo "<pre>\n";
var_dump($_SESSION);
echo 
"</pre>\n";
?>



Profil ansehen Mail senden
Seite: 1 no reply
Powered by Pascal Landau © 2006 MyWebsolution.de
Designed by Pascal Landau © 2006 MyWebsolution.de
 
 
 
 
Home Email Impressum Disclaimer Statistik