Includere file di login con sessioni

Ciao

Volevo includere nella home page del mio sito uno spazio per il login che indirizzasse ad una pagina protetta.

Lo script da solo funziona benissimo ma inserito come include mi restituisce messaggi di errore.

questo il codice per il login che usa le sessioni:

<?php
session_start();
dbconnect();
if (!isset($verified_user)) $verified_user='';
$username=str_replace("'","",$username);
$psw=str_replace("'","",$psw);

$pass = $_REQUEST['psw'];

if ($_REQUEST['action']=='login') {
   $result=mysql_query("SELECT id_user FROM utentidb WHERE username='".$_REQUEST['username']."' AND password='".MD5($pass)."'");
   if (mysql_num_rows($result)>0) list($verified_user)=mysql_fetch_row($result);
   else $verified_user='';
}
$_SESSION['verified_user']=$verified_user;
if ($verified_user != '') {
   header("Location: utenti.php");
} else {
   if ($_REQUEST['action'] == 'login' && $verified_user == '') {
      echo"<font color=\"red\">Login error!</font> <br> <br>";
   }
   ?>
<html>
<body>
<table height="100%" width="100%" border="0">
<tr>
<td align="center">
   <form name="login_form" action="login.php" method="post">
   <input type="hidden" name="action" value="login">
   <table align="center"  cellpadding="5" cellspacing="5">
   <tr>
  <td colspan="2"  align="center"><b>Accedi ai tuoi dati</b></td>
</tr>
<tr>
<td>   Username: <input type="text" name="username"></td>
</tr>
<tr>
<td> Password: <input type="password" name="psw"></td>
</tr>
<tr>
<td align="center" colspan="2">
 <input type="submit" name"Login" value="Login Now!"></form></td>
</tr>
</table>
</form><br>
</td>
</tr>
</table>
</body>
</html>
   <?php
   }
?>
<?php
echo"<br>";
function dbconnect() {
   mysql_connect("localhost", "root", "");
   @mysql_select_db("login4") or die ("Unable to select database");
}
?>

l'ho incluso nella home in un livello in questo modo:

...........
<div class="titolo_box">Link</div>
</div>
<div id="box3">
<div class="titolo_box">Area riservata</div>
<?
include('login.php');

?>

</div>


..............

Apro la pagina e mi ritrovo con il seguente messaggio di errore:

Warning: session_start() [function.session-start]: Cannot send session

cache limiter - headers already sent (output started at C:\Programmi

\xampp\htdocs\frank\brow.php:1) in C:\

Programmi\xampp\htdocs\frank\login.php on line 2

Si può fare qualcosa o devo cambiare completamente metodo e impostazione pe il login?

Ci tenevo a "reciclare"  :) questo codice perchè è parte di un lavoro più complesso che mi è costato tanto lavoro un po' di tempo fa.

Grazie

inviato 7 anni fa
frankphp
X 0 X

Forse apri due volte la sessione cone la funzione session_start(); una volta nella home e una volta nel login, prova a togliere uno dei due e vedi se funziona!

Ciao!

risposto 7 anni fa
Hroud
X 0 X

Forse apri due volte la sessione cone la funzione session_start(); una volta nella home e una volta nel login, prova a togliere uno dei due e vedi se funziona!

Ciao!

No è sola questa.

Grazie

risposto 7 anni fa
frankphp
X 0 X

cosa devo fare?

grazie

risposto 7 anni fa
frankphp
X 0 X

Io non saprei, quando è uscito questo errore a me è perchè avevo aperto due volte la sessione!  ???

risposto 7 anni fa
Hroud
X 0 X
Io non saprei, quando è uscito questo errore a me è perchè avevo aperto due volte la sessione!  ???

se non posso utilizzare le sessioni potrei utilizzare i cookie.

In questo caso qualcuno conosce dei buon tutorial in merito?

Non ho mai usato i cookie.

Ma, se è possibile, vorrei risolvere prima questo problema.

Grazie

risposto 7 anni fa
frankphp
X 0 X

Ciao,

nella home invece di includere lo script dopo il form prova a includerlo a inizio pagina, prima di ogni altra cosa e vedi se ti da sempre l'errore.

Ciao

risposto 7 anni fa
Gioge
X 0 X

Ciao,

nella home invece di includere lo script dopo il form prova a includerlo a inizio pagina, prima di ogni altra cosa e vedi se ti da sempre l'errore.

Ciao

si così non mi da problemi di output, ma non mi fa il login. Credo i dati non vengano inviati per qualche problema alla sessione.

risposto 7 anni fa
frankphp
X 0 X

Ciao, prova così:

$result=mysql_query("SELECT id_user FROM utentidb WHERE username='".$_REQUEST['username']."' AND password='".MD5($pass)."'");
$righe = mysql_fetch_row($result);
  if(!strlen($righe[0]) == 0){               //se trova utenti con quella password e username crea la sessione e invia alla pagina utenti
    $_SESSION['verified_user'] = $righe[0]
    header("Location: utenti.php");
else {
if ($_REQUEST['action'] == 'login' && $verified_user == '') {
echo"<font color=\"red\">Login error!</font> <br> <br>";
}
?>

il tutto in un if tipo if(!IsSet($_SESSION['verified_user']))

Ciao

risposto 7 anni fa
Gioge
X 0 X

Ciao, prova così:

$result=mysql_query("SELECT id_user FROM utentidb WHERE username='".$_REQUEST['username']."' AND password='".MD5($pass)."'");
$righe = mysql_fetch_row($result);
  if(!strlen($righe[0]) == 0){               //se trova utenti con quella password e username crea la sessione e invia alla pagina utenti
    $_SESSION['verified_user'] = $righe[0]
    header("Location: utenti.php");
else {
if ($_REQUEST['action'] == 'login' && $verified_user == '') {
echo"<font color=\"red\">Login error!</font> <br> <br>";
}
?>

il tutto in un if tipo

if(!IsSet($_SESSION['verified_user']))

Ciao

Non ho capito qual'è la differenza sostanziale, scusami.

risposto 7 anni fa
frankphp
X 0 X

possibile che l'include faccia scattare il session_start? ma mi sembra strano perchè dovrebbe lavorare a livello di testo, e non dovrebbe eseguire il codice  :o

Oppure prova a mettere l'inizializzazione della sessione prima della direttiva include() (rimuovendolo però dal file che includi)

scusa il lieve off topic: se non vado errato, se dai quella query in pasto a mysql o ad altri db, aumenti l'esposizione alle SQL injections e per un login non è il massimo di questi tempi

risposto 7 anni fa
fatmatt
X 0 X

possibile che l'include faccia scattare il session_start? ma mi sembra strano perchè dovrebbe lavorare a livello di testo, e non dovrebbe eseguire il codice  :o

Oppure prova a mettere l'inizializzazione della sessione prima della direttiva include() (rimuovendolo però dal file che includi)

scusa il lieve off topic: se non vado errato, se dai quella query in pasto a mysql o ad altri db, aumenti l'esposizione alle SQL injections e per un login non è il massimo di questi tempi

Strano ho inserito session_start(); all'inizio di index.php , ma l'ho lasciato anche nel file login.php incluso e adesso non da messaggi di errore.

Per quanto riguarda le SQL injections non so che dirti (non sono un esperto di php).

Perchè, secondo te, il codice è esposto?

Quale modifica dovrei fare?

Dimmi tutto in merito, per me non c'è problema, figurati.

E' un'occasione per imparare qualcosa di nuovo, anzi, posta il codice o il testo che potrebbe causare problemi di sicurezza che lo provo subito.

Grazie e ciao

risposto 7 anni fa
frankphp
modificato 7 anni fa
X 0 X

ti spiego brevemente: la variabile $_REQUEST contiene dei dati che sono inseriti dall'utente dai form, e dagli url  (metodi POST e GET per intenderci)

Se tu inserisci così com'è una variabile definita dall'utente in una query mysql dai la possibilità di inserire nella tuia query del codice SQL a discrezione del cattivone di turno  >:D

Una trattazione approfondita in questa sede è impossibile (io me ne occupo abbastanza approfonditamente e la faccenda è complessa), però ti posto dei link che ti possono essere utili

http://php.html.it/articoli/leggi/896/proteggersi-dalla-sql-injection/

http://it2.php.net/security.database.sql-injection

risposto 7 anni fa
fatmatt
X 0 X

ti spiego brevemente: la variabile $_REQUEST contiene dei dati che sono inseriti dall'utente dai form, e dagli url  (metodi POST e GET per intenderci)

Se tu inserisci così com'è una variabile definita dall'utente in una query mysql dai la possibilità di inserire nella tuia query del codice SQL a discrezione del cattivone di turno  >:D

Una trattazione approfondita in questa sede è impossibile (io me ne occupo abbastanza approfonditamente e la faccenda è complessa), però ti posto dei link che ti possono essere utili

http://php.html.it/articoli/leggi/896/proteggersi-dalla-sql-injection/

http://it2.php.net/security.database.sql-injection

va bene, grazie.

Mi studio un po' la faccenda

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