Cookies und php.ini

07/23/2012 15:14 Phillor#1
Hallo Leute!
Ich wollte heute zu meinem Login Script mal eine Autologin Funktion hinzufügen. Habe das Ganze erstmal versucht bei mir lokal einzurichten doch es werden einfach keine Cookies gesetzt.

hier der Befehl, mit dem ich versuche den Cookie zu setzen:

PHP Code:
setcookie("Autologin"$Login_IDtime()+60*60*24*365*10); 
und es lässt sich weder mit echo $_COOKIE['Auotlogin']; ausgeben noch mit dem Cookie Editor Plugin von Google Chrome anzeigen, während der Session Cookie, der automatisch von den Sessions generiert wird da ist!

Muss ich dafür in der php.ini in XAMPP irgendwass freischalten?

Gruß,
Phillor
07/23/2012 17:16 PseudoPsycho#2
Nee, müsste standardmäßig bereits möglich sein.
Versuch' doch mal via
PHP Code:
var_dump($Login_ID); 
zu prüfen, ob die Variable auch wirklich einen Wert hat, sofern du das noch nicht getan hast. Ansonsten musst du natürlich beachten, dass der Wert nicht sofort in $_COOKIE gespeichert ist, sondern erst beim nächsten Aufrufen der Seite...
07/23/2012 18:01 Phillor#3
Die Variable wurde eine Zeile drüber definiert ^^
Aber auch wenn ich die Seite nochmal neu lade und mit dem Cookie Editor nachschaue wurde keiner gespeichert...
komisch

/edit
Ich habs rausgefunden.
Danke trotzdem :)
Kann geschlossen werden
07/23/2012 18:45 PseudoPsycho#4
Woran lag's denn?
07/23/2012 19:38 Phillor#5
naja also ich habe mal NUR den setcookie Code genommen und ihn in ne eigene Datei gepackt. Da hat's funktioniert.

Jetzt habe ich das wieder in mein Login Script integriert und jetzt funktionierts wieder nicht D:
das finde ich komisch...

Und die if Abfrage, die vorher überprüft, ob die Autologin Checkbox checked ist funktioniert auch.
Ich weiß einfach nicht was das Problem ist :/

Moment ich poste mal den Code:

Das hier ist in meinem Login Script:
Quote:
if ($autologin == "0"){
$part_one = substr(time()-rand(100, 100000),5,10);
$part_two = substr(time()-rand(100, 100000),-5);
$Login_ID = md5($part_one.$part_two);

setcookie("Autologin", $Login_ID, time()+60*60*24*365*10);
$sql = "UPDATE user SET Autologin = '".$Login_ID."' WHERE ID = '".$ID."'";
mysql_query($sql);

}
Und das in der externen Datei ist halt nur ohne if Abfrage...
07/23/2012 22:23 PseudoPsycho#6
Quote:
Originally Posted by kissein View Post
genau deshalb ist php eine _schlampensprache_
Was hat'n das allgemein mit PHP zu tun? Ist meiner Meinung nach eine sehr schöne Sprache.

Wie kommt'n der Wert für $autologin zustande?
Gib' mal vor der Abfrage die Variable (über var_dump) aus und pack' mal direkt in die Abfrage echo 'Bedingung stimmt'; .
Bei letzterem dürfte wohl nichts ausgegeben werden.
07/23/2012 22:27 kissein#7
weil die type-sicherheit in php fehlt :/

er kann int auf string überprüfen
07/23/2012 22:31 Phillor#8
vor welcher Schleife denn? O.o

Der Wert für den Cookie Autologin ist eine Login ID, die zufällig generiert wird, diese wird halt in der DB eingetragen und wenn dann jemand die Seite betritt und die Login ID im Cookie == Login ID in der DB ist, dann wird er automatisch eingeloggt, ansonsten muss er sich halt ganz normal einloggen.
07/24/2012 12:08 kissein#9
Quote:
Originally Posted by Phillor View Post
vor welcher Schleife denn? O.o

Der Wert für den Cookie Autologin ist eine Login ID,
die zufällig generiert wird, diese wird halt in der DB eingetragen
und wenn dann jemand die Seite betritt und die Login ID im Cookie == Login ID
in der DB ist, dann wird er automatisch eingeloggt, ansonsten muss er sich halt ganz normal einloggen.

ich würds sorum mal probieren...

PHP Code:

if(isset($_COOKIE['Autologin']) && !empty($_COOKIE['Autologin']))
{
    
//mysql Abfrage auf Cookiewerte
    
$res mysql....
    if(
$res){
        
//Sessionwerte setzen, 
        //weiterleitung
    
}
    else
    {
        
$part_one substr(time()-rand(100100000),5,10); 
        
$part_two substr(time()-rand(100100000),-5); 
        
$Login_ID md5($part_one.$part_two); 

        
setcookie("Autologin"$Login_IDtime()+60*60*24*365*10);
        
$sql "UPDATE user SET Autologin = '".$Login_ID."' WHERE ID = '".$ID."'"
        
mysql_query($sql);
    }

07/24/2012 13:24 Phillor#10
Mein Problem ist ja, dass der Code im Zusammenhang mit meinem normalen Login Script nicht funktioniert.

PHP Code:
if ($autologin == "0"){
$part_one substr(time()-rand(100100000),5,10); 
$part_two substr(time()-rand(100100000),-5); 
$Login_ID md5($part_one.$part_two); 

setcookie("Autologin"$Login_IDtime()+60*60*24*365*10);
$sql "UPDATE user SET Autologin = '".$Login_ID."' WHERE ID = '".$ID."'"
mysql_query($sql);


Habe auch versucht einfach diese If Abfrage oben auszukommentieren und den Code innerhalb der If Abfrage nur zu includen, aber es funktioniert einfach nicht....

ich schicke euch mal mein gesamtes Login Scipt.

PHP Code:
if($row['Passwort'] == $passwort){
                            
     if (
$autologin == "1"){
                            
     
$part_one substr(time()-rand(100100000),5,10); 
     
$part_two substr(time()-rand(100100000),-5); 
     
$Login_ID md5($part_one.$part_two); 

     
setcookie("Autologin"$Login_IDtime()+60*60*24*365*10);
     
$sql "UPDATE user SET Autologin = '".$Login_ID."' WHERE ID = '".$ID."'"
     
mysql_query($sql);
                            
     } 

     
mres(mysql_query("UPDATE user SET IP = '$ip' WHERE Nickname = '$username';"));
                            
     
mres(mysql_query("UPDATE user SET LastAction = '$timestamp' WHERE Nickname = '$username';"));
                            
     
$_SESSION['username'] = $row['Nickname'];
     
$_SESSION['id'] = $row['ID'];
     
$_SESSION['timeout'] = time();
     echo 
"<span id='green'><table><tr><td><img src='img/content/success.png' alt='' /></td><td>Anmeldung erfolgreich!</td></tr></table></span><br />";
                            
}
else
{
     echo 
"<span id='red'><table><tr><td><img src='img/content/fail.png' alt='' /></td><td>Dein Benutzername oder dein Passwort ist falsch.</td></tr></table></span><br />";

07/24/2012 14:07 kissein#11
Quote:
Originally Posted by Phillor View Post
Mein Problem ist ja, dass der Code im Zusammenhang mit meinem normalen Login Script nicht funktioniert.
Überprüfe doch einfach alle Variablenwerte mit den Erwartungswerten, und schalt dein error_reporting an sowie ein paar print_r/var_dump/var_export/echo an den wichtigen bedingungen setzen.


Code:
if($row['Passwort'] == $passwort){
                            
     if ($autologin == "1"){
$passwort eventuell $_POST['passwort '] ?
$row['Passwort'] existiert mit wert ?
$autologin existiert mit wert ?

Debuggen macht kein Spass aber man lernt sauber zu arbeiten ;)

//Edit:

Gerade noch gesehen
if ($autologin == "1"){ ...setcookie }
if ($autologin == "0"){ ...setcookie }

Beide Abfragen mit unterschiedlichen Werten sollen die gleiche Funktion erfüllen ? Sinn?
07/24/2012 14:28 Phillor#12
-.- Ich hatte mein Error Reporting ausgeschaltet...

habs jetzt angeschaltet und es kommt beim einloggen, mit Autologin folgender Fehler:

Warning: Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs\Liga\index.php:36) in C:\xampp\htdocs\Liga\sites\login.php on line 144

Ich verstehe das nicht... in der Index.php in der Zeile 36 steht folgendes:

PHP Code:
<?php
gefolgt von dem:
PHP Code:
                    if (isset($_SESSION['username'])){
                    echo 
"
                    <div id='logout'><a href='?s=logout'>Ausloggen</a></div>
                    <div id='welcome'>Willkommen "
.$_SESSION['username']."</div>
                    <a href='?p=profile_edit'>Profil bearbeiten</a>"
;
                    
                    
                    if (
$auth == "N" or $auth == "R"){
                    
                        
                    
                    
                    }
                    
                    if (
$auth == "A"){
                        echo 
"<br /><a href='acp/index.php'>Administrationsbereich</a>";
                    }
                    
                    
                    } else {
                    echo 
"
                    <div id='formular'>
                    <form name='login' method='post' action='?s=login'>
                    <span class='tipp'>Nickname:</span><br />
                    <input type='text' size='10' name='nickname' maxlength='25' /><br />
                    <span class='tipp'>Passwort:</span><br />
                    <input type='password' size='10' name='pw' maxlength='32'/><br />
                    <input type='checkbox' name='autologin' value='1' id='auto' /><label for='auto'><spand class='small'>Autologin?</span></label><br />
                    <input type='submit' name='login' value='Einloggen' />
                    
                    </form>
                    </div>
                    <div id='tipp'>
                    Du hast noch keinen Account? <a href='?s=register'>Registriere</a> dich jetzt! Vollkommen kostenlos und unverbindlich!
                    </div>
                    "
;
                    
                    
                    
                    
                    
                    }
                
?> 
Quote:
Gerade noch gesehen
if ($autologin == "1"){ ...setcookie }
if ($autologin == "0"){ ...setcookie }
Ja ^^ das habe ich zum testen gemacht. Natürlich muss beides $autologin == "1" sein ;)
07/24/2012 15:09 kissein#13
[Only registered and activated users can see links. Click Here To Register...]

Quote:
Beachten Sie, dass Sie die Funktion header() aufrufen müssen, bevor Sie irgendeine andere Art von Ausgabe (seien es normale HTML-Tags, Leerzeilen in einer Datei oder von PHP) zum Client schicken. Es handelt sich hier um einen typischen Fehler, der zum Beispiel auftritt, wenn Sie Code mittels include oder require oder einer anderen Dateizugriffs-Funktion einlesen, die Leerzeichen oder Leerzeilen enthalten, die ausgegeben werden, bevor header() aufgerufen wird. Das gleiche Problem kann auch auftreten, wenn Sie eine Datei verwenden, in der HTML und PHP vermischt wurden.
07/24/2012 15:56 Phillor#14
Ja ok aber in der index.php habe ich die funktion header doch gar nicht benutzt...
07/24/2012 16:06 kissein#15
Quote:
Warning: Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs\Liga\index.php:36) in C:\xampp\htdocs\Liga\sites\login.php on line 144
ganze fehlermeldung lesen...

- output started at C:\xampp\htdocs\Liga\index.php:36, heisst hier werden bereits die ersten daten gesendet bevor header in

- C:\xampp\htdocs\Liga\sites\login.php on line 144 aufgerufen wird

Quote:
Es handelt sich hier um einen typischen Fehler, der zum Beispiel auftritt, wenn Sie Code mittels include oder require oder einer anderen Dateizugriffs-Funktion einlesen, die Leerzeichen oder Leerzeilen enthalten, die ausgegeben werden, bevor header() aufgerufen wird.
Nochmal zum Verständnis...

Ziel ist ein Autologinscript welches bei erfolg automatisch verbindet.
Ich gehe davon aus das html bereits gesendet wurde bevor die cookie login funktion in login.php aufgerufen wurde, welche mit header() weiterleiten soll.

Schlussfolgerung....
cookielogin funktion muss vor der ausgabe der webseite stattfinden wenn via header gearbeitet werden soll....