Login Problem

FipsTheThief

Erfahrenes Mitglied
Sodele ich hab ein kleines Login Script , nun will ich eine Session weiterreichen dazu will ich wissen ob der Nutzer Cookies aktiviert hat und speicher dazu einen Cookie auf der Festplatte welcher eingentlich nur 10 sek leben soll.
Er besteht zwar ne ganze Minute aber das werd ich dann wohl mit mktime() statt time() probieren.

So dadurch will ich herrausfinden ob er Cookies akzeptiert oder nicht , falls ja dann brauch ich die aktuelle session_id() ja nicht über die URL weiter geben , wenn nicht ja dann muss ich es tun.

So bei mir getestet und ich weiss genau das ich cookies akzeptiere , aber dennoch übergibt er die aktuelle Session_id() über die URL.

PHP:
<?php
...
         session_start();
             $_SESSION['Ende']   = time()+1800;

             if($this->cookie == "ja"){
             /* Automatischer Login ist gewollt also Cookie setzen und die Login
                Daten speichern */
               $UserData = $this->loginName."¥¥".$this->loginPass;
               setCookie("autoLogin",$UserData, mktime(0,0,0,12,24,2037));
               HEADER('LOCATION: http://'.$_SERVER["SERVER_NAME"]
                                         .dirname($_SERVER["REQUEST_URI"])
                                         .'/AdminScreen.php');
             }else{
             /* Test Cookie setzen welcher 10 sek lebt zwecks weiterleitung
                Ob die Session_ID über die URL weitergegeben werden muss
                oder ob die Session als Cookie auf der Platte gespeichert wird*/
                
               setCookie("CookieTest","test",time()+10);

               if(isset($_COOKIE['CookieTest'])){
                    HEADER('LOCATION: http://'.$_SERVER["SERVER_NAME"]
                                              .dirname($_SERVER["REQUEST_URI"])
                                              .'/AdminScreen.php');
                }else{
                     HEADER('LOCATION:http://'.$_SERVER["SERVER_NAME"]
                                              .dirname($_SERVER["REQUEST_URI"])
                                              .'/AdminScreen.php?SID='.session_id());
                }//Cookie Überprüfung schliessen

            }//Ende kein automatischer Login
...
?>

Der Cookie existiert normal schon sobald man sich eingeloggt hat dann , aber dennoch sagt er cookie existiert nicht und zack übergibt er die session_id() über die URL.
Irgendwie versteh ich das nicht so ganz , eventuell kann mir dabei ja wer helfen.

MfG
 
Zuletzt bearbeitet:
wenn du eine session id anlegst dann ist sie komplett überall dort verfügbar wo du am anfang session_start() schreibst verfügbar.
Mit den cookies würde ich persönlich sowieso lassen. gerade beim login. wenn da einer ist der cookies net akzeptiert haste wieder ein prob.
also session_start hilft weiter.
und wenn du in den anderen siten nach dem als erstes schreibst:
Code:
<?session_start ();?>
<? if (!session_is_registered('id'))//oder deine sessionvar
{
header("Location:index.php");//oder dort hin wohin du verlinken willst fals er net eingeloggt ist
}
?>
passt das scho
greez
 
Ja darum ja auch die Abfrage mit den kurzen Cookie speichern :)

Ich wollte halt erreichen das ich die Session_ID nicht über die url weitergeben muss wenn es nicht nötig ist.

Wenn er nun keine Cookies akzeptiert dann soll er halt die Session_ID immer über die URL weitergeben. Sonst sind die Daten die ich speicher auf der nächsten Seite hinfällig.

Also zum allgemeinen Ablauf:

zuerst kommt die Abfrage , ist der Cookie schon gespeichert für den automatischen Login ? wenn ja dann geht er gleich zur Login Überprüfung ohne das Formular anzuzeigen.Session wird gestartet.

Wenn er nicht gefunden wurde oder kein automatischer Login erwünscht ist:
dann kommt zuerst ein Formular.Da kann man dann einen Radio Button anklicken "ja ich will wieder erkannt werden".dann geht er zur Login Überprüfung und startet wieder die Session.

So nach dem die Session gestartet ist , soll er eben überprüfen ob die Session als Cookie gespeichert werden kann oder nicht.

Später dann wird die Session aufgerufen , ist halt nur die Frage woher es kommt ob über die URL oder von der Festplatte des Nutzers.
 
dann schreib doch in den cookie noch eine hilfsvariable die du ausließt. wenn diese dann vorhanden ist kommt es aus dem cookie sonst halt nicht.
 
Ich glaube wir reden an einander vorbei ;) Der kurze CookieTest soll nur dazu da sein um zu wissen muss ich die Session_ID über die URL übergeben oder nicht.
Wenn ich es über die URL weitergeben muss ist es halt doch ein gewisses Sicherheits Risiko , darum hab ich mir einen Cookie setzen lassen , den TestCookie um zu wissen ja er akzeptiert Cookies oder nein er tut es nicht.

Bringt aber irgendwie nix er kann den cookie auch setzen aber findet ihn dennoch nicht.

Naja hier mal das komplette Script eventuell hilft das wen weiter.Wer er sagte automatischer Login , dann hat sich die Frage schon erledigt.

PHP:
<?php
require ("Includes/DatabaseConnect.php");

/*******************************************************************************
Section Login Formluar
    Login : schaun wer sich eingeloggt hat
    Cookie Speichern falls erwünscht
    Session starten wenn keine Cookies erlaubt werden über URL weitergeben
*******************************************************************************/
CLASS Eingabe extends DataBaseConnect{

  var $loginName;
  var $loginPass;
  var $cookie;
  var $user;
  var $error =0;
/*******************************************************************************
Konstruktor der Klasse und Weiterleitung an die Funktionen zu weiterverarbeitung
*******************************************************************************/

  function Eingabe($loginName,$loginPass,$cookie){
    $this->SetLoginVariables($loginName,$loginPass,$cookie);
    $this->LoginCheck();
  }

/******************************************************************************/
  function SetLoginVariables($loginName,$loginPass,$cookie){
    $this->loginName = $loginName;
    if(!isset($_COOKIE['autoLogin'])){
        $this->loginPass = md5($loginPass);
    }else{
        $this->loginPass = $loginPass;
    }
    $this->cookie    = $cookie;
  }
/*******************************************************************************
Section LoginCheck :
        Wenn ein Cookie['autoLogin'] existiert , Cookie auslesen und
        loginName = 1. Wert des Cookies
        loginPass = 2. Wert des Cookies
        Schaun ob die Eingaben übereinstimmen und dann festlegen wer sich
        eingeloggt hat.
*******************************************************************************/

  function LoginCheck(){
      $this->connect(); // Funktion der Klasse DataBaseConnect aufrufen

      $Login =  mysql_query("SELECT User,Pass,Rechte,TEAM FROM mitglieder");
      $zeilen = mysql_num_rows($Login);
      
      for($i=0;$i<$zeilen;$i++){
        $Ergeb[$i] = mysql_fetch_array($Login);
      }

      for($i=0;$i<count($Ergeb);$i++){
        if($Ergeb[$i]['User'] == $this->loginName &&
           $Ergeb[$i]['Pass'] == $this->loginPass){

           session_start();
             $_SESSION['Ende']   = time()+1800;
             $_SESSION['Rechte'] = $Ergeb[$i]['Rechte'];
             $_SESSION['TEAM']   = $Ergeb[$i]['TEAM'];

             if($this->cookie == "ja"){
             /* Automatischer Login ist gewollt also Cookie setzen und die Login
                Daten speichern */
               $UserData = $this->loginName."¥¥".$this->loginPass;
               setCookie("autoLogin",$UserData, mktime(0,0,0,12,24,2037));
               HEADER('LOCATION: http://'.$_SERVER["SERVER_NAME"]
                                         .dirname($_SERVER["REQUEST_URI"])
                                         .'/AdminScreen.php');
             }else{
             /* Test Cookie setzen welcher 5 sek lebt zwecks weiterleitung
                Ob die Session_ID über die URL weitergegeben werden muss
                oder ob die Session als Cookie auf der Platte gespeichert wird*/
                
               setCookie("CookieTest","test",time()+10);

               if(isset($_COOKIE['CookieTest']) && $_COOKIE['CookieTest'] == "test"){
                    HEADER('LOCATION: http://'.$_SERVER["SERVER_NAME"]
                                              .dirname($_SERVER["REQUEST_URI"])
                                              .'/AdminScreen.php');
                }else{
                     HEADER('LOCATION:http://'.$_SERVER["SERVER_NAME"]
                                              .dirname($_SERVER["REQUEST_URI"])
                                              .'/AdminScreen.php?SID='.session_id());
                }//Cookie Überprüfung schliessen

            }//Ende kein automatischer Login

           }else{
             $this->error++;
           }
        }
        if($this->error == $zeilen){
          echo "Kein Zutritt";
        }
    }//Funktion LoginCheck schliessen
}//Klasse Eingabe schliessen

/*******************************************************************************
Section automatischer Login
Wenn ein Cookie gefunden wurde zerlege ihn in seine Bestandteile
und starte den Login
*******************************************************************************/
if(isset($_COOKIE['autoLogin'])){
     if(isset($_COOKIE['autoLogin'])){
        $LD=explode('¥¥',$_COOKIE['autoLogin']);
      }
      
    $eingabe = new Eingabe($LD[0],$LD[1],"FALSE");
}
/*******************************************************************************
Kein Automatischer Login aktiviert , Cookie nicht zu finden
*******************************************************************************/

elseif(isset($_POST['login']) && $_POST['login'] == "einloggen"){

  if(!empty($_POST["LoginName"]) && !empty($_POST["Pass"])){

        if(isset($_POST["cookie"])){
            $eingabe = new Eingabe($_POST["LoginName"],$_POST["Pass"],$_POST["cookie"]);
        }else{
            $eingabe = new Eingabe($_POST["LoginName"],$_POST["Pass"],"FALSE");
        }
  }

}else{
    echo '<form method="post" action="'.$_SERVER["PHP_SELF"].'">
            <input type="text" name="LoginName" value=""  size="15"><br>
            <input type="password" name="Pass" maxlength="15" size="15" value=""><br>
            <input type="checkbox" name="cookie" value="ja">Wiedererkennen?<br>erfordert Cookies<br>
            <input type="submit" value="einloggen" name="login">
          </form>';
}
?>
 
Zurück