PDA

View Full Version : [PHP] uso di $_SESSION e session_register()


Re_Kotc
25-11-2009, 20:33
ciao a tutti, sto cercando di imparare qualcosa sulle sessioni in php, ho trovato del codice in cui viene fatto uso di session_register() ma in esecuzione poi mi da degli errori perchè è deprecato (da molto tra l'altro) allora ho visto che dovrei utilizzare $_SESSION, solo che sempre nello stesso codice ho sia questo:


session_register("username","nome","cognome")


che questo:



$_SESSION["username"]=(urlencode($row["username"]));
$_SESSION["nome"]=(urlencode($row["nome"]));
$_SESSION["cognome"]=(urlencode($row["cognome"]));


e vengono eseguiti uno di seguito all'altro..ma da quanto ho capito (se ho capito qualcosa) non fanno esattamente la stessa cosa? a cosa serve usarli entrambi così? grazie e scusate se ho detto qualche stupidata!

bottomap
25-11-2009, 20:45
Ciao,

La session_register crea le variabili di sessione usando le variabili php indicate nelle stringhe passate come parametro.
In sostanza con il primo spezzone che hai postato ottieni il risultato seguente:
$_SESSION["username"]=$username;
$_SESSION["nome"]=$nome;
$_SESSION["cognome"]=$cognome;
Chiaramente è necessario definire prima le variabili $username, $nome e $cognome affinché entri qualcosa di valido in sessione.

Il secondo spezzone invece fa un assegnamento esplicito, ma in quel caso i dati provengono da un array $row e passano attraverso un urlencode.

In sostanza i due spezzoni *non* fanno la stessa cosa. Usati insieme comunque (hai pienamente ragione) c'è una ridondanza che non ha motivo di esistere (la session_register chiama implicitamente una session_start per creare la sessione, se essa non fosse già stata chiamata - forse per questo è stata lasciata).

E'ben chiaro che, più che deprecata, la session_register è una funzione di utility in realtà relativamente inutile... ha di buono che ti permette di fare una serie di $_SESSION["x"]=$x; in cascata visto che ha un numero variabile di argomenti e che eventualmente accetta anche un array come parametro, ma non è niente di indispensabile.

Ciaociao :)

Re_Kotc
25-11-2009, 21:18
ok ti ringrazio per la risposta :)
E dire che il codice viene dal mio profe :D:D....grazie ancora!

bottomap
25-11-2009, 21:27
Beh, le sviste capitano anche ai migliori...

L'unico motivo per cui potrebbe avere un senso, come detto è la chiamata implicita a session_start, che comunque potrebbe essere fatta esplicitamente e sostituire la session_register.

E'chiaro anche che il codice precedente la funzione "incriminata" e quello presente tra la funzione e gli assegnamenti $_SESSION[x]=y può avere un suo peso ed una sua economia, impossibile dirlo ovviamente senza vederli.

Ciaociao :)

Re_Kotc
25-11-2009, 21:30
Beh, le sviste capitano anche ai migliori...

Purtroppo session_start() viene chiamato subito prima di register..:D:D

per quanto riguarda il codice intermedio tra i due spezzoni:

$user = trim($_POST["username"]);
$user = addslashes($user);
$pass = trim($_POST["password"]);
$pass = addslashes($pass);

$checkUser = "SELECT * FROM utenti WHERE username = '$user' AND password = '$pass'";
$res = pg_query($conn,$checkUser);
if(!$res)
die("Errore nella query: " . pg_last_error($conn));

$numrows = pg_num_rows($res);
if ($numrows == 0){

echo "<b> username o password errati </b> <br>";


} else {

in pratica va a prendersi i valori inseriti nel form html e poi fa una query per recuperare dal database l'utente, se non trova nessuna corrispondenza restituisce l'errore, altrimenti esegue quella serie di $_SESSION :)