Uso variabili di sessione

GoldenDragon

Nuovo Utente
22 Giu 2015
8
0
0
Se un sito è destinato a molti utenti che interagiscono nello stesso momento, posso usare delle variabili generiche per fare delle operazioni o tutto ciò che è relativo ad uno specifico utente va in una variabile di sessione e si può usare solo quella?
Voglio dire: per passare informazioni da uno script php ad un altro uso le variabili di sessione, ma all'interno di uno stesso script posso fare qualcosa tipo

PHP:
$username = $_SESSION["username"];

e poi operare sempre su $username o si rischia qualche incongruenza? Perchè in fondo il server è uno e se devo fare la stessa operazione per più utenti mi troverei ad assegnare alla stessa variabile $username più valori diversi...o sbaglio?
 
Non c'entra nulla. La variabile $_SESSION riprende dati dai cookie... ogni browser ha i suoi. Non vengono salvate nel server

Inviato dal mio GT-S5360 con Tapatalk 2
 
Non c'entra nulla. La variabile $_SESSION riprende dati dai cookie... ogni browser ha i suoi. Non vengono salvate nel server

La variabile $_SESSION no, ma la variabile $username si. Il mio dubbio è proprio questo: le variabili NON di sessione indicano lo stesso indirizzo in memoria per ogni utente o sono allocate diversamente per ogni utente collegato?

Ad esempio:

PHP:
<?php session_start();

/*Istruzione 1:*/  $username = $_SESSION['username'];  //salvato in precedenza da un altro script
/*Istruzione 2:*/  echo $username;

?>


Se due utenti eseguono lo script nello stesso momento, ipotizzando che i loro username siano 'Pippo' e 'Pluto', se il server esegue i due assegnamenti prima di stampare a video, ad es:

Codice:
$username = 'Pippo';
$username = 'Pluto';

Verranno eseguite due echo uguali, visto che $username ora contiene 'Pluto'. Quindi l'utente Pippo si vedrà stampato a video 'Pluto'. O viene allocata una $username per ogni sessione attiva, quindi le due variabili sono fisicamente diverse e contengono quindi i valori corretti?
 
Se un sito è destinato a molti utenti che interagiscono nello stesso momento, posso usare delle variabili generiche per fare delle operazioni o tutto ciò che è relativo ad uno specifico utente va in una variabile di sessione e si può usare solo quella?
Voglio dire: per passare informazioni da uno script php ad un altro uso le variabili di sessione, ma all'interno di uno stesso script posso fare qualcosa tipo

PHP:
$username = $_SESSION["username"];

e poi operare sempre su $username o si rischia qualche incongruenza? Perchè in fondo il server è uno e se devo fare la stessa operazione per più utenti mi troverei ad assegnare alla stessa variabile $username più valori diversi...o sbaglio?
Le sessioni sono array di dati, puoi usarli come ti serve, senza riserva :D
Ma in pratica si usano per due motivi principali, il passaggio dei dati da una pagina all'altra e ovviamente per ricordare i dati durante un'intera sessione di navigazione del sito da parte di un utente.
Per il secondo quesito invece devi sapere che ogni a utente ( cioè a ogni richiesta ) il server riserva un certo spazio di memoria ( in genere Apache 8 mega per il php per ogni richiesta ) e quindi ogni utente gira in quello spazio.
Tu non puoi prevedere quanti utenti gireranno sul tuo sito e non te ne devi nemmeno preoccupare, ci pensa il server a gestire la cosa.

E attento a cosa usi perché i cookie vengono sempre immagazzinati nel client se questo li accetta, se no... ciccia :D ( hai notato che ora tanti siti chiedono sempre di abilitarli? ) le sessioni invece sono file a solo accesso da parte del server che non vengono affatto immagazinate in locale, ma in locale c'è un riferimento alla sessione, il cosiddetto PHPSESID.
Non necessariamente le sessioni contengono i dati del cookie, anzi non lo fanno mai se non ce li metti.

@GoldenDragon
Il php usa due array separati per essi e cioè $_SESSION mentre i cookie usano $_COOKIE e i due dati non sono in connessione tra loro.
Inoltre $_CCOKIE può accettare poche coppie di valori ben definiti come il nome ( obbligatorio ), un valore ( lo si estrae con $_COOKIE['nome'] ), la data in cui il cookie smette di essere valido, il path dove il cookie deve agire ( all'interno del sito non del computer client ), il nome di dominio su cui agire ( sempre ottimo metterlo ) , secure ( true o false che corrispondo al protocollo https= si o https=no ) e ultimo httponly che però non è supportato da tutti browser ( se no, viene ignorato ) in pratica messo a true impedisce al javascript di accedere al cookie, in questo modo si implementa un sistema ( debole ) che dovrebbe impedire il furto di identità attraverso il cookie.

$_SESSION invece lo usi proprio come una variabile e può contenere solo una coppia nome=valore, dove valore può essere anche un altro array.

Quale dei due metodi usare dipende da ciò che si deve realizzare.
Io tendo sempre a non usare i cookie proprio perché poco sicuri dal punto della sicurezza a meno di non dover gestire cose come la cookie law, dove il cookie serve solo per sapere se hai o meno accettato la legge... per il resto vai di sessione.

Se usi le sessioni per immagazzinare un utente, non mettere mai dentro il numero o il nome che lo identifica sul database, se c'è un furto di sessione è facilissimo fregare l'account; molto meglio immagazzinare un hash che contenga dati associati, come ad esempio username + $_SERVER['HTTP_USER_AGENT'] che lo lega solo e soltanto a quella macchina ( l'IP non conviene usarlo perché non puoi sapere se l'utente è in una sottorete come me ora, o in shared, come tutti oramai ).
In pratica metti nella sessione due valori
PHP:
$_SESSION['username'] = $username
$_SESSION['auth'] = sha1($id . $_SERVER['HTTP_USER_AGENT']);
e ogni volta che vuoi verificare se chi è connesso è chi dice di essere, chiedi al database l'id dello username immagazzinato in $_SESSION['user'] e poi fai
PHP:
if ( sha1($id . $_SERVER['HTTP_USER_AGENT']) == $_SESSION['auth'] ) {
  // continuo...
} else {
  header('location: login.php');
}
Farraginoso? Sì ma che ci vuoi fare? Se vuoi star sicurto questo è solo l'entry level.

fonti e varie :)
http://php.net/manual/en/session.idpassing.php
https://en.wikipedia.org/wiki/Session_(computer_science)
http://php.net/manual/en/session.customhandler.php
 
Perfetto, grazie mille. Hai risolto il mio dubbio e mi hai dato un sacco di informazioni in più :beer:
Scusate se ho abusate del tasto "Sei un genio" ma un semplice ringraziamento non era abbastanza :fonzie:
 

Discussioni simili