[PHP] funzione login (ricordami)

Salve, perchè se inserisco il codice setcookie in questo modo per far che l'utente sia ricordato dal sistema,

Questo è nella pagina login:

if ( $_POST['ricorda_log'] != '' ):

           setcookie("log", $_SESSION["log"], time()+3600*14);//14 giorni

         endif;

e questo e nella pagina logout.php

 setcookie("log", $_SESSION['log'], -1);//Elimino il cookie

Se inserisco questi due e se non faccio nessun ricordami , il codice non mi da gli avvisi,

ma se metto il ricordami mi da questo avviso:

Warning: Cannot modify header information - headers already sent by (output started at D:\xampp\htdocs\www.xxxxxxxx.net\inc\funzioni.php:27) in D:\xampp\htdocs\www.xxxxxxx.net\admin\index.php on line 33

e pure levandoli dal codice ed avendo un session_start(); non  visualizzo più quell'avviso.

Come mai?

grazie mille.

inviato 5 anni fa
luigi
X 0 X

A questa riga:

D:\xampp\htdocs\www.xxxxxxxx.net\inc\funzioni.php:27

Probabilmente stai facendo un echo di qualcosa.

risposto 5 anni fa
Mario Santagiuliana
X 0 X

A questa riga:

D:\xampp\htdocs\www.xxxxxxxx.net\inc\funzioni.php:27

Probabilmente stai facendo un echo di qualcosa.

ok, grazie mille era quello perché io avevo fatto uno script funzioni.php

che ogni funzione aveva <?php  ?>  ed ora lo tolti tutti, lo messo  solo uno ed ha funzionato.

grazie mille.

risposto 5 anni fa
luigi
X 0 X

Se il file contiene solamente codice php è addirittura meglio inserire solamente il tag php di apertura all'inizio del file e poi non chiuderlo.

Ciao

risposto 5 anni fa
Mario Santagiuliana
X 0 X

ciao marioS , non mi funziona il checkbox o meglio se clicco sul checkbox non rimango attivo e mi rimanda sempre alla pagina di login.

ecco il codice:

<?php

session_start();

require_once(dirname(__FILE__) . '/../inc.php');

if(isset($_POST["submit"]))

{

if($_POST["Email"]!="" && $_POST["password"]!="")

   {

      

      

      

   $query = "SELECT * FROM users WHERE Email='".mysql_codifica($_POST["Email"])."' AND password='".mysql_codifica($_POST["password"])."'";

   $result = $db->query($query);

   

   

   if ( mysql_num_rows($db->query($query)) == 1 )

   {

    $row = mysql_fetch_assoc ($db->query($query));

     

     if($row["Active"] == 0)

     {

     $error = "Da attivare";

     }

     elseif ( $row["Active"] == 1 )

      {

         $_SESSION["userid"] = $row["id"];

         $_SESSION["Name"] = $row["Username"];

         $_SESSION["_Group"] = $row["_Group"];

         $_SESSION["loggedin"] = true;

         

         $query_update_dateTime= "UPDATE users SET SignUpDate = NOW() WHERE id=".$_SESSION["userid"]."";

         $result = $db->query($query_update_dateTime);

                  

         $query_insert_online = "INSERT INTO users_online (UserID,Name)VALUES(".$_SESSION["userid"].",'".$_SESSION["Name"]."')";

         $result = $db->query($query_insert_online);

         

         if ( $_POST['ricorda_log'] == 1):

         setcookie("log", $_SESSION["log"], time()+3600*14);//14 giorni

         endif;

       

         //redirect("home/",1);

      }   elseif ( $row['Active'] == 2 ) {

               $error = "Confermare l'attivazione di conferma account";

            }

            elseif ( $row['Active'] == 3 ) {

               $error = 'Account sospeso';

            }

      else {      

      $error = 'Acesso falito!';      

      }

         

      }else

      {

      $error = "Non esistono dati inseriti";

      }

      $db->close();

   }  

   

   else 

   {

   $error= " username e password, sbagliati. Riprovare!";

   }

   

}

?>

<div align="center">

<?php   if ( isset ( $error ) )   { echo '         <p style="error">' . $error . '</p>' . "\n";   }   ?>

<?php   if ( isset ( $msg ) )   { echo '         <p class="msg">' . $msg . '</p>' . "\n";   } else {//if we have a mesage we don't need this form again.?>

   <form id="form" method="post" action="<?php echo $_SERVER["PHP_SELF"];?>">

<table align="center" width="500px;">

<tr>

   <td>Email</td>

   <td><input type="text" name="Email"  value='<?php if(isset($_POST['Email'])){echo $_POST['Email'];}?>' /></td>

</tr>

<tr>

   <td>Pasword</td>

   <td><input type="password" name="password" value='<?php if(isset($_POST['password'])){echo $_POST['password'];}?>' /></td>

</tr>

<tr>

   <td>Ricordami</td>

   <td><input type="checkbox" name="ricorda_log" value="1" /></td>

</tr>

<tr>

   <td></td>

   <td><input type="hidden" name="loginUpdate" value='<?php echo date("Y-m-d H:i:s"); ?>' readonly /></td>

</tr>

</table>

<div align="center">

<input class="submit" type="submit" name='submit' value="Submit" />

</form>

</div>

</div>

<?php } ?>

e questa la pagina privata:

<?php

session_start();

require_once(dirname(__FILE__) . '/../../inc.php');

if($_SESSION["log"] == 1 || $_SESSION["_Group"] == "10" || $_SESSION["_Group"] == "5")

{   

require_once(dirname(__FILE__) . '/../../template/admin/header.php'); 

echo $_SESSION["log"]; 

require_once(dirname(__FILE__) . '/../../template/admin/footer.php'); 

}

else

{ echo "Non hai i peremssi - attendere il redirect ";

  redirect("../../admin/",2); }

?>

Mi poi dire come posso fare che è già 3 giorni che sto provando.

grazie mille.

risposto 5 anni fa
luigi
X 0 X

Dovresti fare, prima di presentare il login, un controllo sull'esistenza dei cookie e delle sessioni aperte. Se sono state aperte delle sessioni o sono stati salvati dei cookie per il login "automatico" allora eviti di far vedere il login form e lasci accedere l'utente.

Mi sembra ti manchi solo questa cosa qui.

risposto 5 anni fa
Mario Santagiuliana
X 0 X

ok,

ora cosi:

if($_POST['remember_me'] == 1){

         $cookie_name = 'siteAuth';

$cookie_time = (3600 * 24 * 30); // 30 days

         setcookie ($cookie_name, 'usr='.$row["Email"].'&Password='.$password_, time() + $cookie_time);

      

         }

e con questo codice rimango connesso solo se entro facendo ricordami. ma se non faccio "ricordami" non mi fa entrare e mi manda sempre alla login.

Mi dici come posso risolvere?.

grazie mille.

ecco il codice dell'area privata:

<?php

session_start();

require_once(dirname(__FILE__) . '/../../inc.php');

if(isSet($cookie_name))

{

if(isSet($_COOKIE[$cookie_name]))

{

  

require_once(dirname(__FILE__) . '/../../template/admin/header.php'); 

echo $_COOKIE["userID"]; 

require_once(dirname(__FILE__) . '/../../template/admin/footer.php'); 

}else

{ 

echo "Non hai i peremssi - attendere il redirect ";

  redirect("../../admin/",2); 

}

}

?>
risposto 5 anni fa
luigi
X 0 X

se mi dici come far questo tutorial dove ho preso spunto:

http://www.bitrepository.com/php-autologin.html

ed integrarlo con il database mi fai un grande favore solo che io ci ho provato mille e mille volte senza riuscirsi.

Mi daresti una mano?

grazie mille.

risposto 5 anni fa
luigi
X 0 X

Questa parte di codice:

if(isSet($cookie_name))
{
if(isSet($_COOKIE[$cookie_name]))
{

E' corretta ma manca una cosa. Tu in questo modo, come hai detto, puoi collegarti solo se metti "ricordami", cioè se imposti i cookie. Un utente lo puoi autenticare tramite le sessioni, dunque devi aggiungere un secondo controllo (aggiungi OR al controllo if) per l'esistenza di una sessione attiva.

tipo:

if(isSet($cookie_name) || $_SESSION['quello che è'] )
{
if(isSet($_COOKIE[$cookie_name]) || /* altro controllo */)
{

In questo modo dovrebbe funzionarti!

risposto 5 anni fa
Mario Santagiuliana
X 0 X

scusa mario ma ho cambiato tutto . sto provando a programmare in classi.

il login e sempre quello di sopra questo e il controllo per far entrare chi voglio:

function checkLogin($levels)
   {
      
        global $db;
      
      if($_SESSION['logged_in'])
      {
         $access = FALSE;
      }
      else {
         $kt = explode(' ', $levels);
         
         $query = $db->query('SELECT Level_access FROM users WHERE ID = "'.mysql_real_escape_string($_SESSION['user_id']).'"');
         $row = mysql_fetch_assoc($query);
         
         $access = FALSE;
         
         while(list($key,$val)=each($kt))
         {
            if($val==$row['Level_access'])
            {//if the user level matches one of the allowed levels
               $access = TRUE;
            }
         }
      }
      if($access==FALSE)
      {
         header("Location: login.php");
      }
      else {
      //do nothing: continue
      }
      
   }

e la funzione si usa cosi:

checkLogin('1 2'); <- qui dipende chi voglio far entrare.

1= amministratore

2= collaboratore.

Mi dici come aggiungo il ultimo pezzo che mi hai scritto?

Quella funzione non lo fatta io , lo presa da un tutorial.

Mi protesti aiutarmi?

grazie mille.

risposto 5 anni fa
luigi
modificato 5 anni fa
X 0 X

Si tratta di lavorare sempre con i controlli if, lo devi fare tu a seconda di come vuoi che la tua applicazione funzioni. Uno schema logico di funzionamento mi pare di avertelo fornito.

risposto 5 anni fa
Mario Santagiuliana
X 0 X

ok, ma tanto ho risolto sto usando la nuova versione dello script (area riservata) , che a tutto e ho risolto il problema.

ciao.

risposto 5 anni fa
luigi
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda

Domande simili