• User Attivo

    Ancora sul login...

    ...della serie "l'incubo continua ancora :D"

    Ciao a tutti,

    ho letto vari tutorial sugli script di login, ho scatabellato anche tra i post di questo forum ma non ho trovato ancora niente che mi soddisfacesse.
    Vado al sodo:

    Io vorrei scrivermi uno script per fare il login ma che non usi le sessioni per evitare i soliti problemi con gli header (che poi non ho capito se è una limitazione del php).
    Vorrei però utilizzare i coockie per memorizzare una pseudosessione.

    Al momento sto usando uno script scritto da terzi (con cookie e sessioni) ma è soggetto a malfunzionamenti perchè "incluso" in un file index.php.

    E' possibile fare questo?
    Che strada dovrei seguire?

    Gli script che devono essere eseguiti dopo l'autenticazione al momento iniziano così:

    
    if(IsSet($_COOKIE['PHPSESSID']))  {
    
    ```e potrebbero forse? iniziare così?
    

    if(IsSet($_COOKIE['qualcosa_tipo_PHPSESSID'])) {

    greybear
    
    P.S. dimenticavo di dire che non uso DB e che lo user è uno solo (admin)

  • Moderatore

    se posti tutto lo script o ci mostri qualcosa online potremmo aiutarti meglio

    grazie 🙂


  • User Attivo

    Ciao massimux,

    quello che segue è il codice modificato dal tutorial di Davide Coppola su:

    http://www.siforge.org/articles/2003/11/10-guida_sessioni_php.html

    Il problema è che essendo questo script "incluso" nel file index.php, quando viene chiamato c'è sicuramente qualche output di qualche header "appeso" da qualche parte che aspetta di uscire.
    Il sito (per vedere l'output html) è questo:

    http://picoflat.altervista.org

    Al momento ho bypassato il problema con l'istruzione ob_start() in testa al file index.php ma questo mi impedisce di fare tante altre cose, per questo non vorrei usare le sessioni.

    Grazie,
    greybear

    <?php
    /************************************************************************/
    /* PicoFlat - Flat Text Based Content Management System                 */
    /* ====================================================                 */
    /*                                                                      */
    /* Copyright (c) 2007 by Domenico Mancini                               */
    /* Mailto: [email protected]                                         */
    /* http://www.beamitaly.tk                                              */
    /*                                                                      */
    /* This program is free software. You can redistribute it and/or modify */
    /* it under the terms of the GNU General Public License as published by */
    /* the Free Software Foundation; either version 2 of the License.       */
    /* Basato su uno script di Davide Coppola.
    /************************************************************************/
    
    $dir = getcwd();
    $leng = strlen("$dir");
    $start = $leng - 4 ;
    $rdir = substr($dir,$start,$leng);
    if ($rdir == "misc") { chdir ("../"); }
    
    include ("autoconf.php");
    include ("general_func.php");
    
    $redirect = $local_url;
    
    // ****************************************************************************************
    // * dati per il login 
    // ****************************************************************************************
     
      if (!$apri = fopen("misc/parole.php","r")){
        echo "login: Non posso aprire il file $apri";
      } else {
         if(!feof($apri)){
            $riga1 = fgets($apri,255);
            $login_user = rtrim(fgets($apri));
            $pass_user = rtrim(fgets($apri));
         }
        fclose($apri);
      }
    
    // ****************************************************************************************
    // * gestione della sessione nel caso in cui i cookie sono disabilitati 
    // ****************************************************************************************
    
    if(IsSet($_POST['PHPSESSID']) && !IsSet($_COOKIE['PHPSESSID'])) 
    { 
      $PHPSESSID=$_POST['PHPSESSID']; 
      header("Location: $redirect?PHPSESSID=$PHPSESSID"); //si ricarica la pagina di login
    } 
    
    session_start(); //si inizia o continua la sessione 
    
    // ****************************************************************************************
    // * controllo user e passwd da login e se ci sono setto la sessione
    // ****************************************************************************************
    
    if(IsSet($_POST['posted_username']) && IsSet($_POST['posted_password']))
    
    { 
    // ripulisco username e password
      $temp_user = $_POST['posted_username'];
      $tmp = (eregi_replace("[\\\|\(\)\"\+£$%&()=?^;:,@#^èéàùìòç°§]","",$temp_user));
      $sani_user = $tmp;
    
      $temp_pass = $_POST['posted_password'];
      $tmp = (eregi_replace("[\\\|\(\)\"\+£$%&()=?^;:,@#^èéàùìòç°§]","",$temp_pass));
      $sani_pass = $tmp;
    
      $valore = logger($temp_user, $email);
    
      if($login_user==md5($sani_user) && $pass_user==md5($sani_pass))
      $_SESSION['user']=$sani_user; // ok passo e imposto $_SESSION
    } 
    
    // ****************************************************************************************
    // * creazione cookie per login automatico 
    // ****************************************************************************************
    
    if(IsSet($_POST['ricorda']) && IsSet($_SESSION['user'])) // solo se check ricorda!!
    { 
      //$cok=md5($login_user)."%%".$pass_user; 
      $cok=$login_user."%%".$pass_user; 
      setcookie("sav_user",$cok,time()+31536000); 
    } 
    
    // ****************************************************************************************
    // * logout 
    // ****************************************************************************************
    
    if(isset($_GET['logout']) && $_GET['logout']==1)          // solo se ho cliccato logout!!!
    { 
      $_SESSION=array();             // Desetta tutte le variabili di sessione. 
      session_destroy();             // DISTRUGGE la sessione. 
        if(IsSet($_COOKIE['sav_user']))     // se presente si distrugge il cookie di login automatico 
          setcookie("sav_user",$cok,time()-31536000);
      header("Location: $redirect?pagina=news_publisher.php"); //si ricarica la pagina di login 
      exit; //si termina lo script in modo da ritornare alla schermata di login 
    } 
    
    // ****************************************************************************************
    // * controllo user e passwd da cookie 
    // ****************************************************************************************
    
    if(IsSet($_COOKIE['sav_user']))  // solo se uso i cookie!!!
    { 
      $info_cok=$_COOKIE['sav_user']; 
      $cok_user=strtok($info_cok,"%%"); 
      $cok_pass=strtok("%%"); 
      setcookie("sav_user",$info_cok,time()+31536000); 
    
      if($cok_user==md5($login_user) && $cok_pass==$pass_user) 
        $_SESSION['user']=$login_user; 
    } 
    
    // ****************************************************************************************
    // * caso in cui si vuole ricordare il login, ma i cookie sono off 
    // ****************************************************************************************
    
    if(!IsSet($_COOKIE['PHPSESSID']) && IsSet($_POST['ricorda'])) 
      header("Location: $redirect?pagina=nocookie=1"); 
    
    
    // ****************************************************************************************
    // * Qui inizio la sessione vera e propria...
    // ****************************************************************************************
    // Questa (a partire dal tag HTML) dovrebbe essere il codice da includere nella pagina riservata ???
    
    $PHPSESSID=session_id(); 
    
    if(!IsSet($_SESSION['user'])) //non siamo loggati, pagina di login 
    { 
      if(isset($_GET['nocookie']) && $_GET['nocookie']==1) //i cookie sono off e si vuole ricordare il login 
        print("Mi dispiace, ma con i cookie disabilitati non si possono fare i miracoli ;)<br /> 
        Attivali se vuoi ricordare il tuo login.<br />"); 
    
      print("<center><b><font color=\"red\">Questa è un'area privata e protetta. Se non sei autorizzato, per favore esci.<br />This is a private and protected area. Please log off if you are not authorized.</font></b></center>");
      print("<br /><br /> ");
      print("<FORM METHOD=post ACTION=\"$redirect?pagina=misc/login.php\"> <center>");
        
      print("username: ");
      print("<INPUT TYPE=TEXT SIZE=20 NAME=posted_username /><br /> <br />");
    
      print("password: ");
      print("<INPUT TYPE=PASSWORD SIZE=20 NAME=posted_password /><br /> <br />");
    
      print("ricordami: ");
      print("<INPUT TYPE=CHECKBOX NAME=ricorda VALUE=1 /><br /><br /> ");
      print("<INPUT TYPE=SUBMIT NAME=SUBMIT VALUE=\"Entra\" /><br /> </center>"); 
    
      if(!IsSet($_COOKIE['PHPSESSID'])) 
        //i cookie sono off, dobbiamo propagare noi il PHPSESSID 
        print("<INPUT TYPE=HIDDEN NAME=PHPSESSID VALUE=$PHPSESSID />"); 
        print("</FORM>");
      } 
      else 
      {  
        //siamo loggati pagina riservata 
        $username=$_SESSION['user'];
        if (IsSet($username)) {
          header("Location: $redirect?pagina=news_insert.php"); 
      }
    } 
    ?> 
    
    ```P.S. L'ingresso di amministrazione è in linea con un vecchio thread di questo forum :figo: