bjb: cookie problem

hallo zusammen
ich hab ein problem mit einem cookie
er heißt 'login'
gesetzt habe ich ihn so:
  setcookie("login",$name);

jetzt möchte ich ihn so löschen:
  setcookie("login","",time()-3600);

geht aber nicht
muss ich dafür schon beim setzen ein zeit angeben?
will ich aber eigentlich nicht

kann mir jemand helfen??

gruß
    bjb

  1. ok
    kleine korrektur mit dem IE gehts mit mozilla 1.4 nicht
    kann mir trotzdem jemand helfen?? (wie es mit mozilla gehen könnte)

    gruß
        bjb

  2. Hallo,

    jetzt möchte ich ihn so löschen:
      setcookie("login","",time()-3600);

    ...warum nicht einfach so?
    setcookie("login","",time());

    Grüße, Alex

    --
    ss:{ zu:) ls:< fo:| de:] va:) ch:? sh:( n4:# rl:( br:> js:| ie:{ fl:( mo:) (decoden: http://tinyurl.com/cyzt)
    1. ...warum nicht einfach so?

      weil ichs von php.net hab ;-)

      setcookie("login","",time());

      ok geht auch
      mit mozilla gehts trotzdem nicht

  3. jetzt möchte ich ihn so löschen:
      setcookie("login","",time()-3600);

    geht aber nicht

    Mach' Nägel mit Köpfen und setze die Zeit auf 0. Ich persönlich habe wegen der Zeitzonen und insbesondere der Sommerzeit immer ein Problem mit Zeitangaben. Nicht, daß es hier so sein muß, aber die Angabe "1 Stunde zurück" erscheint mir unter diesem Gesichtspunkt etwas wackelig ;) Eine 0 liegt auch in der Vergangenheit, aber dafür richtig: 1.1.1970 - das muß wirken.

    Möglicherweise löscht Mozilla die Cookies auch erst etwas später, beim Verlassen einer Seite o.ä. Meiner ist zur Zeit gerade nicht griffbereit, kannst Du im Cookie-Manager nicht die Verfallszeit ablesen? Stimmt die mit jener vom IE überein (bei Zeitpunkten in der Zukunft)? Erst wenn Du da ein Verfallsdatum in der Vergangenheit entdeckst, hast Du einen Fehler in Mozilla gefunden.

    Gruß,
      soenk.e

    1. kannst Du im Cookie-Manager nicht die Verfallszeit ablesen?

      "Gültig bis: Am Ende der Sitzung"
      das heißt mozilla ändert das Verfallsdatum nicht
      gibts eine andere Möglichkeit Cookies zu löschen??
      sollte allerdings mit php sein, ist nämlich für die Schule ;-)
      ist wohl ein mozilla bug
      mit mozilla firebird geht's nämlich

      gruß
          bjb

      1. ist wohl ein mozilla bug

        neue version runtergeladen
        --> geht

        gruß
           bjb

      2. kannst Du im Cookie-Manager nicht die Verfallszeit ablesen?
        "Gültig bis: Am Ende der Sitzung"
        das heißt mozilla ändert das Verfallsdatum nicht

        Ich hab's jetzt mit Mozilla 1.3 probiert und es funktioniert einwandfrei, sowohl mit "0" als auch "time()-3600" als Verfallsdatum. Kann also ein Fehler in älteren Mozilla-Versionen sein.

        gibts eine andere Möglichkeit Cookies zu löschen??

        Du kannst es beim Löschen des Cookieinhalts belassen, denn darum geht's ja letztenendes: Keine Logindaten, kein Login. Beim Beenden des Browsers sollte der Cookie dann in jedem Fall verschwinden.

        Wobei mir auffällt: Deine Loginverwaltung scheint schlecht aufgebaut zu sein (zumindest dem Beispiel nach). Sogar Anfänger können am entsprechenden Ort auf ihrem Rechner eine passende Zeile eintragen, mit der ein Cookie Login und einem beliebigen Nutzernamen erzeugt und gesendet wird.

        Ein Logincookie sollte niemals ausschließlich Daten enthalten, die jeder kennt oder erraten kann. Benutze nach erfolgreicher Anmeldung etwas in folgender Art:

        $cookie=Array("nutzer"=>$nutzer,"passwort"=>md5($passwort));
          setcookie("login",serialize($cookie));

        md5() erzeugt eine Prüfsumme aus dem Passwort, die zwar eindeutig, aber nicht reversibel (entschlüsselbar) ist.
        serialize() macht aus einer beliebigen Variable einen Text, der sich später wieder in eine Variable zurückwandeln lässt; auf diese Art und Weise ersparst Du dem Benutzer gegenüber zwei setcookie()-Aufrufen (jeweils für "nutzer" und "passwort") einen Cookie und entsprechende, mehrfache Nachfragen vom Browser.

        Auf den dann abgerufenen Seiten wirst Du jedesmal Name und Passwort erneut prüfen müssen, denn es reicht wie bereits angedeutet nicht, nur nach der Existenz von Daten zu fragen. Die Daten müssen auch plausibel sein!

        if (isset($_COOKIE["login"]))
            {
             $cookie=unserialize($_COOKIE["login"])
             $passwort=passwort_aus_nutzer_datenbank_abfragen($cookie["nutzer"]);
             $logged_in=(md5($passwort)==$cookie["passwort"]);
            }
           else
            {
             $logged_in=false;
            };

        Beachte bitte auch den Teil, der $logged_in explizit auf false setzt. Niemals unintialisierte Variablen benutzen!

        Zu guter Letzt: Mit dem in PHP eingebauten Sessionmanagment fährst Du einfacher, weil es statt den tatsächlichen Logindaten nur eine Sessionkennung an den Browser ausgibt, die nicht vorhersehbar ist (sein sollte). Damit kannst Du Dir dann auch die obige Passwortgeschichte sparen und Dich nur auf den Nutzernamen verlassen.

        Gruß,
          soenk.e

        1. kannst Du im Cookie-Manager nicht die Verfallszeit ablesen?
          "Gültig bis: Am Ende der Sitzung"
          das heißt mozilla ändert das Verfallsdatum nicht

          Ich hab's jetzt mit Mozilla 1.3 probiert und es funktioniert einwandfrei, sowohl mit "0" als auch "time()-3600" als Verfallsdatum. Kann also ein Fehler in älteren Mozilla-Versionen sein.

          ist wohl ein fehler in der 1.4 alpha
          1.4 beta geht

          gruß

          bjb

        2. hallo sönke
          ich habs jetzt mal so (ähnlich) probiert wie du es vorgeschlagen hast:

          $name=$_POST['user'];
              $password=$_POST['password'];
              $logged_in=FAlSE;
          if (!empty($name)&&!empty($password)){
            echo $name;
            if ($name=="testuser" &&$password=="testpw"){
                    $cookie=Array('USER'=>$name,'PASSWORD'=>md5($password));
                    setcookie('login',serialize($cookie));
                    echo '<h1>Hallo '.$name.'</h1>';
            }
            else{
                die('<div class="err"> Passwort und/oder Username falsch</div>');
            }
          }
          else{
            if (isset($_COOKIE['login'])){
                  $cookie=unserialize($_COOKIE['login']);
                  $name=($cookie['USER']);
                  $logged_in=((md5('testpw')==$cookie['PASSWORD'])&&($name=='testuser'));
                  echo $name;
                  if ($logged_in==true){
                    echo '<h1>Hallo '.$name.'</h1>';}
                  else login();
            }
            else login();
          }

          geht leider nicht
          siehst du den/die fehler??

          danke schonmal

          Gruß
              bjb

          1. ich habs jetzt mal so (ähnlich) probiert wie du es vorgeschlagen hast:

            geht leider nicht

            "Geht nicht gibt's nicht." Was passiert? Ist keine Anmeldung möglich? Wird kein Cookie gesetzt? Ist die Anmeldung nicht nutzbar? Sind die Cookiedaten falsch?

            Im Prinzip sieht's richtig aus. Ich habe mir das Ganze nur kurz aus den Fingern gesaugt, kann sein, daß da noch irgendwo ein Denkfehler drinsteckt.
            Lasse das Skript einfach mal mit mehreren var_dump()s durchlaufen und beobachte, welche Variablen andere Werte erhalten als erwartet.

            Gruß,
              soenk.e

            1. $name=$_POST['user'];
                  $password=$_POST['password'];
                  $logged_in=FAlSE;
              if (!empty($name)&&!empty($password)){
                echo $name;
                if ($name=="testuser" &&$password=="testpw"){
                        $cookie=Array('USER'=>$name,'PASSWORD'=>md5($password));
                        setcookie('login',serialize($cookie));
                        echo '<h1>Hallo '.$name.'</h1>';
                }
                else{
                    die('<div class="err"> Passwort und/oder Username falsch</div>');
                }
              }
              der teil hier drüber geht

              else{
                if (isset($_COOKIE['login'])){
                      $cookie=unserialize($_COOKIE['login']);
                      $name=($cookie['USER']);
                      $logged_in=((md5('testpw')==$cookie['PASSWORD'])&&($name=='testuser'));

              echo(var_dump($logged_in))         ====>false sollte aber true sein

              if ($logged_in==true){
                        echo '<h1>Hallo '.$name.'</h1>';}
                      else login();
                }
                else login();
              }

              1. so nochmal:

                else{
                  if (isset($_COOKIE['login'])){
                        $cookie=unserialize($_COOKIE['login']);

                echo var_dump($_COOKIE['login']);  ==> stimmt
                           echo var_dump($cookie);            ==>bool(false) hääää? was soll das?

                $name=($cookie['USER']);

                echo var_dump($name)               ==>'NULL'

                $logged_in=((md5('testpw')==$cookie['PASSWORD'])&&($name=='testuser'));

                echo(var_dump($logged_in));         ====>false sollte aber true sein

                if ($logged_in==true){
                          echo '<h1>Hallo '.$name.'</h1>';}
                        else login();
                  }
                  else login();
                }

                das problem ist wohl das unserialize
                oder?
                allerdings versteh ich das nicht

                hast du ne idee??

                danke

                gruß
                    bjb