PDA

View Full Version : [php] proteggere "bene" una cartella


bouncey2k
05-12-2007, 20:21
Ciao a tutti!
Mettiamo che io abbia una pagina password.php con un form di invio password che mi serve per accedere a /cartella/admin.php

La pagina /cartella/admin.php preleva la password tramite un semplice costrutto IF-ELSE e se è valida mostra la pagina.

Mettiamo che in /cartella/admin.php ci siano vari link utili all'amministratore che anch'essi dovrebbero essere protetti, come ad esempio /cartella/pannello1.php /cartella/pannello2.php, ecc...

come faccio a proteggere tutta la cartella senza impostare password ad ogni pagina?

cionci
06-12-2007, 08:20
Memorizzi nella sessione se l'utente è riuscito o meno ad avere accesso amministrativo.

Ad esempio:

$_SESSION["isAdmin"] = 1;

Nelle altre pagine controlli se $_SESSION["isAdmin"] esiste...se esiste allora permetti l'accesso alle pagine.

bouncey2k
06-12-2007, 12:10
un esempio di script?

khamel
06-12-2007, 13:46
Se se su un hosting che ha effettuato il passaggio a php5 allora puoi usare questa,

http://www.phpclasses.org/browse/package/4125.html

è una classettina che ho fatto tempo fa, nel readme trovi le istruzioni per utilizzarla.

Ciao

bouncey2k
15-01-2008, 17:24
scusate se riapro questo vecchio post ma avrei bisogno di capire dove sbaglio.

pagina1.php
<?
session_start();
session_register("variabile");
$variabile = "ciccia";

echo "password esatta!<br />
<a href=\"pagina2.php\">test3</a>";
?>

pagina2.php
<?
session_start();
if ( !isset ($variabile) )
{ echo "la sessione e' attiva"; }
else
{ echo "la sessione non e' attiva"; }
?>

Perché mi dice che la sessione non e' attiva? :muro:

cionci
15-01-2008, 17:28
Hai letto il mio post ? Non mi sembra guardando il tuo codice.

bouncey2k
15-01-2008, 17:44
Hai letto il mio post ? Non mi sembra guardando il tuo codice.

hai scritto una sola riga di codice, se tu me lo spiegassi... magari con qualche riga di più :)

cionci
15-01-2008, 17:57
Non c'è altro da spiegare.
All'inizio del tuo codice crei la sessione con session_start(); come hai fatto nel codice che hai postato.
Poi immetti le variabili nella sessione...la sessione è rappresentata dal vettore associativo $_SESSION.

$_SESSION["var1"] = 1;

immette la variabile var1 nella sessione.

if ( isset($_SESSION["var1"]) )
{ echo "la sessione e' attiva"; }
else
{ echo "la sessione non e' attiva"; }

bouncey2k
15-01-2008, 18:08
Ho fatto come mi hai detto, ma ho una domanda. Nella seconda pagina session_start() lo devo inserire?
Cmq sia che lo inserisco che non, se vado direttamente su pagina2.php mi dice "la sessione è attiva" (ho riavviato anche il browser), invece dovrebbe dirmi che non è attiva...

cionci
16-01-2008, 09:11
session_start va sempre messo.
No...se vai direttamente su pagina2 dopo che hai chiuso il browser ti dice che non è attiva perché nessuno ha immesso la variabile in $_SESSION.

Se vai prima in pagina1 e poi in pagina2 funziona ?

bouncey2k
16-01-2008, 11:08
Ok, adesso pare funzionare. Ma c'è un modo per non far comparire nella barra degli indirizzi l'id della sessione?

pagina2.php?PHPSESSID=numero...

cionci
16-01-2008, 11:29
Normalmente non dovrebbe comparire.

bouncey2k
16-01-2008, 13:06
Normalmente non dovrebbe comparire.

quindi come posso risolvere?

cionci
16-01-2008, 14:30
Il session id di default dovrebbe essere propagato tramite cookie, hai per caso toccato qualcosa in php.ini ? Hai i cookies attivi ?

bouncey2k
16-01-2008, 18:46
Il session id di default dovrebbe essere propagato tramite cookie, hai per caso toccato qualcosa in php.ini ? Hai i cookies attivi ?

Non ho toccato nulla in php.in (non penso di poterlo modificare visto che il server non è il mio).

cionci
16-01-2008, 19:01
Non ho toccato nulla in php.in (non penso di poterlo modificare visto che il server non è il mio).
E allora il server attiva automaticamente la propagazione tramite GET dell'id di sessione, credo che tu non ci possa fare niente...