login due volte per il riconoscimento

iperboreo

Utente Attivo
21 Giu 2012
126
0
16
Ciao a tutti
ho una pagina utente personale che per accedervi occorre eseguire il classico login,
ed è da un pò che quando eseguo il login (corretto) NON riconosce subito l'utente loggato, (che deve apparire la scritta "benvenuto "nome_utente"" con i suoi vari dati)
ma devo eseguire il login due volte se voglio che l utente sia riconoscuto e appaia la sua pagina personale.
Perchè mai si comporta cosi?

Grazie in anticipo
 

iperboreo

Utente Attivo
21 Giu 2012
126
0
16
Come avviene il controllo? Posta la parte di codice interessata

QUESTO è IL CODICE CHE SI OCCUPA DI TUTTO, RICHIAMATO DAL FORM DI LOGIN:
PHP:
<?php


$host="localhost"; // Hostname
$username="colorshop"; // Mysql username
$password=""; // Mysql password
$db_name="my_colorshop"; //Nome del Database
$tbl_name="registrazione"; // Nome della Tabella
// Procedimento per connettersi al Database

mysql_connect("$host", "$username", "$password")or die("cannot connect");
mysql_select_db("$db_name")or die("cannot select DB");
// Nome utente e password inviate attraverso il form

$myusername=$_POST['myusername'];
$mypassword=$_POST['mypassword'];

$sql="SELECT * FROM $tbl_name WHERE username='$myusername' and password='$mypassword'";
$result=mysql_query($sql);


$row = mysql_fetch_array($result);
$id_utente = $row['id'];



// Mysql_num_row is counting table row
$count=mysql_num_rows($result);
// If result matched $myusername and $mypassword, table row must be 1 row
if($count==1){

session_start();
$_SESSION['saluto'] =$_POST['myusername'];


$_SESSION['id']=$id_utente;
$id_utente = $_SESSION['id'];


// Register $myusername, $mypassword and redirect to file "http://colorshop.altervista.org/home.php"

session_register("myusername");
session_register("mypassword");
header("location:http://colorshop.altervista.org/home.php");

}  



else {
@header("Location: attenzione.html");
}



?>

<?php


if(!isset($_COOKIE['ricorda_login'])) {?>
    <input name="ricorda" value="1" type="checkbox" /><?php
}

?>

mi loggo con i dati corretti, mi fa entrare nella homepage, ma non mi riconosce l utente, devo reinserire i dati (username e password ) per far riconoscere l utente

grazie
 

GoshMaledetto

Utente Attivo
20 Dic 2012
137
0
0
www.goshweb.com
allora io la cosa l'ho risolta cosi...

ipotizziamo di avere due pagine login.php e index.php

tu hai il form in login.php e ti rimanda alla pagina index.php giusto?
nella pagina index.php fai i controlli e crei una session giusto?

io ho lo stesso problema con i cookies quindi tu il form lo fai puntare a login.php li fai i controlli e se vanno a buon fine crei la session e fai un redirect a index.php. ovviamente dovrai avere un campo input hidden per controllare se è stato inviato il form per eveitare controlli inutili

login.php
HTML:
<form id="form1" name="form1" method="post" action="login.php">
					<b>Nome utente:</b><br />
					<input type="text" name="user" /><br />
					<b>Password:</b><br />
					<input type="password" name="pwd" /><br />
					<input type="submit" value="Entra" />
				</form>
a inizio pagina metti questi controlli

PHP:
//se utente già loggato rimanda alla index

if(isset($_COOKIE['loggato'])) {
			header("location: index.php"); 
		}
		
		if(isset($_POST['user'])) {

//controllo se esiste l'utente
			$query = "SELECT * FROM utenti WHERE nome_utente = '" . $_POST['user'] . "' AND pwd_utente = '" . $_POST['pwd'] . "' AND level_utente < 6";
			$admin = mysql_query($query,$conn);
			
			if ($row=mysql_fetch_array($admin)) {
			
				setcookie("loggato", $row['id_utente'], time()+3600);
				header("location: index.php"); 
			}
			else {
				header("location: login.php"); 
			}
			
		}

nella index.php ti basterà un controllo solo

PHP:
if(!isset($_COOKIE['loggato'])) {
			header("location: login.php"); 
		}


nel mio codice non ce la parte di dichiarazione del db perche lo includo in ogni pagina da un file esterno in modo che se dovessi modificare il nome al db o la password modifico un file che vale per tutte le pagine che lo utilizzano :elvis:
 

Nefyt

Utente Attivo
17 Apr 2012
1.102
0
0
Il codice è vulnerabile a sql injection, con alcune cose inutili e deprecate (a quale versione risale?), te l'ho un po modificato così

PHP:
require_once 'config.php'; //qui metti tutta la configurazione, cosi hai un file dinamico

$myusername=mysql_real_escape_string($_POST['myusername']);
$mypassword=  mysql_real_escape_string($_POST['mypassword']); //usa un algoritmo come l'md5 o lo sha1 più volte per renderla sicura nel db

$sql="SELECT * FROM $tbl_name WHERE username='$myusername' and password='$mypassword'";
$result=mysql_query($sql);

if(mysql_num_rows($result)==1){

session_start();
$_SESSION['user'] = mysql_fetch_array($result); //es. $_SESSION['user']['id']
header("location:http://colorshop.altervista.org/home.php");

}  
else header("Location: attenzione.html");

Ora per controllare che sei loggato ti basta
PHP:
session_start();
if(isset($_SESSION['user'])) echo 'Sei loggato';
 

iperboreo

Utente Attivo
21 Giu 2012
126
0
16
Grazie per le risposte, so che è vecchiotto il mio script, infatti vi ringrazio per le migliorie.
Ho provato la soluzione che mi avete postato, ho sostituito il mio script con il codice che avete corretto, e funziona bene come prima,
solo che il problema del doppio login cè ancora.
Puo dipendere da qualcos'altro invece che dal codice dello script?

grazie
 

Nefyt

Utente Attivo
17 Apr 2012
1.102
0
0
Grazie per le risposte, so che è vecchiotto il mio script, infatti vi ringrazio per le migliorie.
Ho provato la soluzione che mi avete postato, ho sostituito il mio script con il codice che avete corretto, e funziona bene come prima,
solo che il problema del doppio login cè ancora.
Puo dipendere da qualcos'altro invece che dal codice dello script?

grazie
Forse tu esegui il controllo(se loggato) prima che venga settata la sessione durante il submit, nel senso che se l'invio è corretto la sessione viene creata alla fine e resta sloggato fino ad un ulteriore controllo, mi sembra la spiegazione più plausibile
 

iperboreo

Utente Attivo
21 Giu 2012
126
0
16
Hai ragione deve essere cosi, sto provando in tutti i modi spostando prima o dopo la sessione e il controllo, ma non cambia niente, mi riconosce solo al secondo login.
Ho adattato il mio script secondo le tue indicazioni, non è che ho sbagliato qualcosa? lo posto se hai voglia di dargli un occhiatina veloce:

PHP:
<?php

//connessione al database

$host=""; // Hostname
$username="colorshop"; // Mysql username
$password=""; // Mysql password
$db_name="my_colorshop"; //Nome del Database
$tbl_name="registrazione"; // Nome della Tabella
// Procedimento per connettersi al Database


mysql_connect("$host", "$username", "$password")or die("cannot connect");
mysql_select_db("$db_name")or die("cannot select DB");
// Nome utente e password inviate attraverso il form

$myusername=$_POST['myusername'];
$mypassword=$_POST['mypassword'];


$sql="SELECT * FROM $tbl_name WHERE username='$myusername' and password='$mypassword'";
$result=mysql_query($sql);

if(mysql_num_rows($result)==1){

session_start();
$_SESSION['saluto'] =$_POST['myusername'];


session_start();
$_SESSION['id'] = mysql_fetch_array($result); 
header("location:http://colorshop.altervista.org/home.php");


}  
else header("Location: attenzione.html"); 

?>


Grazie ancora
 

Nefyt

Utente Attivo
17 Apr 2012
1.102
0
0
Hai ragione deve essere cosi, sto provando in tutti i modi spostando prima o dopo la sessione e il controllo, ma non cambia niente, mi riconosce solo al secondo login.
Ho adattato il mio script secondo le tue indicazioni, non è che ho sbagliato qualcosa? lo posto se hai voglia di dargli un occhiatina veloce:

PHP:
<?php

//connessione al database

$host=""; // Hostname
$username="colorshop"; // Mysql username
$password=""; // Mysql password
$db_name="my_colorshop"; //Nome del Database
$tbl_name="registrazione"; // Nome della Tabella
// Procedimento per connettersi al Database


mysql_connect("$host", "$username", "$password")or die("cannot connect");
mysql_select_db("$db_name")or die("cannot select DB");
// Nome utente e password inviate attraverso il form

$myusername=$_POST['myusername'];
$mypassword=$_POST['mypassword'];


$sql="SELECT * FROM $tbl_name WHERE username='$myusername' and password='$mypassword'";
$result=mysql_query($sql);

if(mysql_num_rows($result)==1){

session_start();
$_SESSION['saluto'] =$_POST['myusername'];


session_start();
$_SESSION['id'] = mysql_fetch_array($result); 
header("location:http://colorshop.altervista.org/home.php");


}  
else header("Location: attenzione.html"); 

?>


Grazie ancora

Perché starti 2 volte la sessione e non rendi sicure le variabili?

Inoltre con
PHP:
$_SESSION['user'] = mysql_fetch_array($result); //$_SESSION['user']['username']
Accedi a tutti i dati dell'utente, quindi anche all'username puoi anche non settarli
 

iperboreo

Utente Attivo
21 Giu 2012
126
0
16
Ho modificato cosi, se ho ben capito le tue istruzioni, va meglio? ora provo se mi richiede ancora il doppio login. GRAZIE

PHP:
<?php 
//connessione al database 

$host=""; // Hostname 
$username="colorshop"; // Mysql username 
$password=""; // Mysql password 
$db_name="my_colorshop"; //Nome del Database 
$tbl_name="registrazione"; // Nome della Tabella 
// Procedimento per connettersi al Database 


mysql_connect("$host", "$username", "$password")or die("cannot connect"); 
mysql_select_db("$db_name")or die("cannot select DB"); 
// Nome utente e password inviate attraverso il form 


$myusername=mysql_real_escape_string($_POST['myusername']);
$mypassword=  mysql_real_escape_string($_POST['mypassword']); //èqui che devo modificare in md5?



$sql="SELECT * FROM $tbl_name WHERE username='$myusername' and password='$mypassword'"; 
$result=mysql_query($sql); 

if(mysql_num_rows($result)==1){ 

session_start(); 
$_SESSION['saluto'] =$_POST['myusername']; 


$_SESSION['id'] = mysql_fetch_array($result);  
header("location:http://colorshop.altervista.org/home.php"); 


}   
else header("Location: attenzione.html");  

?>
 

Nefyt

Utente Attivo
17 Apr 2012
1.102
0
0
md5 usalo se hai già memorizzato la password criptata alla registrazione sennò lascialo pure cosi

Questa parte è inutile dato che memorizzando il fetch_array() in una singola sessione hai tutti i dati su essa dal quale puoi accederci quindi anche l'username poi fai come vuoi ovviamente
PHP:
$_SESSION['saluto'] =$_POST['myusername'];  //puoi accederci ad es, $_SESSION['user']['username']
 

iperboreo

Utente Attivo
21 Giu 2012
126
0
16
se non creo la session saluto non ottengo il saluto dell utente una volta loggato.

ma resta sempre il fatto che devo loggarmi DUE VOLTE per accedere alla mia pagina. dipende da questo mio script che uso o da altro? grazie ancora
 

Nefyt

Utente Attivo
17 Apr 2012
1.102
0
0
se non creo la session saluto non ottengo il saluto dell utente una volta loggato.

ma resta sempre il fatto che devo loggarmi DUE VOLTE per accedere alla mia pagina. dipende da questo mio script che uso o da altro? grazie ancora
Da dove spedisci il form, e dopo il redirect ricontrolli la sessione correttamente?
 
Discussioni simili
Autore Titolo Forum Risposte Data
filomeni Due Login con stessa password PHP 1
Athene Rendere visibile un errore in una pagina di login in due modi differenti PHP 8
N Vba Maschera di login MS Access 1
Shyson Codice wp-login non funziona PHP 2
L Problemi con il login PHP 2
L login e session PHP 4
A Problema login con Safari PHP 14
R Reinderizzamento dopo login PHP 2
C finestra popup dopo login PHP 2
L login con solo un codice PHP 3
Web93 PROBLEMA SITO WEB WORDPRESS - LOGIN DASHBOARD Programmazione 3
M Login Autenticazione Sviluppo app per Android 0
M Effettuare Login con dati Json Sviluppo app per Android 0
S [PHP] Stampa a video Nome e Cognome in seguito a login PHP 1
M [PHP] header (location..) non funzionante dopo login PHP 3
L [PHP] Visualizzare utente dopo login PHP 0
L [PHP] login con password_verify PHP 3
A HTML issues with creating a register and login page + general questions HTML e CSS 1
L [PHP] login con varie entrate PHP 3
L [PHP] login con password_verify - password_hash PHP 5
M [PHP] Problemi con il riconoscimento login. PHP 21
F [PHP] Login senza database PHP 3
F [php] sicurezza password form login PHP 2
M [PHP] Metodo migliore per fare login a un DB Mysql PHP 1
F Problema con pagine login in PHP PHP 2
Y [PHP] Errore di login dopo aver inserito Codice AdSense PHP 0
M [PHP] Problemi con login facebook PHP 0
Shyson [WordPress] Nascondere link del Login WordPress 2
W [PHP] Login sicuro al web Service SOAP PHP 20
P [PHP] Limitare login ad un solo utente per volta PHP 12
L [PHP] login e protezione pagine con session PHP 3
L [PHP] login con la classe medoo.in PHP 5
I [PHP] [Javascript] login da smartphone a web PHP 3
P [PHP] Reindirizzamento post Login PHP 3
I [PHP] login con sessione singola PHP 1
AkenStyle Login per gioco online Database 6
bubino8 [WordPress] [PHP] Login diretto da bottone WordPress 4
D [PHP] Login Multiutente con pagina privata PHP 5
D problemi login php 5.6 mysql PHP 1
I [PHP] Login Facebook SDK returned an error: No URL set! PHP 0
G PHP Login PHP 1
Laskot Login php e redirect PHP 1
K [PHP] Unica sessione login forum/sito PHP 1
bubino8 [WordPress] Login a WP da bottone WordPress 0
bubino8 [PHP] Login Automatico PHP 1
R Filtro login tramite mac-address su apache2 SSL Apache 1
M [PHP] Sessione Login PHP 15
C [PHP] Aprire la pagina dopo aver fatto il login PHP 1
fabry1986 [PHP] login PHP 2
Punix pagine login-logout php principiante PHP 4

Discussioni simili