Newsgroup: it.comp.www.php
Titolo: $_session Non capisco dove sbaglio

Apro la sessione e vi registro un array:
session_start();
    $_SESSION["authorizer"] = array ("username" => $username, "password"=>
$password, "livello" => $livello[0]);
    redirect( "admin.php?action=home" );
richiamo l'array:
session_start ();
  $autorizer = $_SESSION; // qui richiamo l'array
    if (isset($autorizer["authorizer"]["livello"])){
    if ($autorizer["authorizer"]["livello"]<$request_livel){
   require "autorizer/low_livel.htm";
      exit;
    }
  } else {
    redirect( "admin.php" );
  }
Lo script mi esegue l'ultima else riportandomi al form che gestisce i dati
dell'array.
Lasciando aperto il browser a quella pagina
( e quindi avendo come indirizzo qualcosa simile a
"admin.php?PHPSESSID=0536975560e30542cda8d12853cf1909")
accade una cosa strana modificando i file dello script.
Infatti:
modifico la parte che richiama la sessione aggiungendo un istruzione:
session_start ();
phpinfo(32);        // questa la parte che aggiungo.
  $autorizer = $_SESSION; // qui richiamo l'array
    if (isset($autorizer["authorizer"]["livello"])){
    if ($autorizer["authorizer"]["livello"]<$request_livel){
   require "autorizer/low_livel.htm";
      exit;
    }
  } else {
    redirect( "admin.php" );
  }
rieseguo il login ed ottengo le info richieste da phpinfo(32)
Con meraviglia noto che lo script mi ha riconosciuto valida la prima parte
del controllo
if (isset($autorizer["authorizer"]["livello"]))
quindi questo significa che prima $_SESSION non era settato mentre ora si.
Tutto quindi funziona regolare fino a che non esco dal browser.
Se provo a rientrare e a rifare il login ho gli stessi problemi e devo fare
questa procedura prima di poter operare:
tento il log e vengo respinto.
modifico la pagina
ritento il log e la modifica mi impedisce di continuare
annullo la modifica
ritento il log e ci riesco senza problemi.
Cosa genera questo strambo comportamento?
dove sbaglio?


Prova con un codice piů banale:
session_start();
session_register("authorizer");
$authorizer=array("username" => $username, "password"=> $password, "livello"
=> $livello[0]);
poi fai un:
session_start();
$authorizer=$_SESSION['authorizer'];
E poi non dovresti chiamare $authorizer['livello'] al posto di
$autorizer["authorizer"]["livello"] ?
Cioč, vero č che tu passi a $authorizer tutto il vettore multidimensionale,
ma cosě il codice č difficile da leggere...
Dai fammi sapere
J

 ma così il codice è difficile da leggere...
ho provatoanche:
 $authorizer= $_SESSION
ma non va...

 ma non va...
Usi iexplorer?
Prova ad abbassare le restrizioni relative ai cookies e riprova.
---
"Basta con questa vita, voglio farmi una famiglia". "Esagerato... fatti 
solo la piů carina di tutta la famiglia" (Alessandro Bergonzoni).

 Prova ad abbassare le restrizioni relative ai cookies e riprova.
niente


Ciao,
potrebbe essere un problema legato al redirect successivo (di solito si
verifica in win).
Prova a fare il redirect anzichč con header("Location:http://... ") con
header("Refresh: 0; URL=http://...");
--------------------------------
Inviato via 
http://arianna.libero.it/usenet/

 header("Refresh: 0; URL=http://...");
per il rederict uso questa funzione:
function redirect ($url = "") {
  $parse_url = parse_url ($url);
  safe_set ($parse_url["scheme"], "http");
  safe_set ($parse_url["host"], $_SERVER['HTTP_HOST']);
  safe_set ($parse_url["path"], "");
  safe_set ($parse_url["query"], "");
  safe_set ($parse_url["fragment"], "");
  if (substr($parse_url["path"],0,1) != "/")
  { $parse_url["path"] = dirname($_SERVER['PHP_SELF']) . "/"
.$parse_url["path"]; }
  if ($parse_url["query"] != "")
  { $parse_url["query"] = $parse_url["query"] . "&amp;"; }
  $parse_url["query"] = "?" . $parse_url["query"] . session_name () ."=" .
session_id();
  if ($parse_url["fragment"] != "")
  { $parse_url["fragment"] = "#" . $parse_url["fragment"]; }
  $url =
$parse_url["scheme"]."://".$parse_url["host"].$parse_url["path"].$parse_url[
"query"].$parse_url["fragment"];
  session_write_close ();
  header("Location: $url");
  exit;
}


prova con questo
<?
session_start();
/*
IMHO non conviene che fai lo storage della password nel SESSION
ma solo del livello
$_SESSION["authorizer"]['username']=$username;
sql selezioni l'user e ti fai dare la password (md5)
fai il confronto della password
*/
if  $row['pass'] === $_POST['pass'];
   $_SESSION["authorizer"]['livello']= $row['lvello'];
}
in questo modo non ti porti la password per il mondo


 session_register("authorizer");
dal manuale:
Use of $_SESSION (or $HTTP_SESSION_VARS with PHP 4.0.6 or less) is
recommended for improved security and code readability. With $_SESSION,
there is no need to use the session_register(), session_unregister(),
session_is_registered() functions.
e soprattutto
http://www.php.net/manual/en/security.registerglobals.php
-- 
Chinaski FDB
www.glabs.it
email: 
ulloatildisturboglabs.it
togli il disturbo per scrivermi
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 session_is_registered() functions.
infatti il codice originale č
$_SESSION["authorizer"]  = array ("username" => $username, "password"=>
$password, "livello" => $livello[0]);
redirect( "admin.php?action=home" ); // added
ma cosě non va

 in questo modo non ti porti la password per il mondo
questo è utile
grazie comunque

 è scritto..
mmm, scusate, volevo dire session_register()

 redirect( "admin.php?action=home" ); // added
si la mia risposta era a julien, che usava session_register() nel suo
esempio


 
http://www.php.net/manual/en/security.registerglobals.php
Fa sempre comodo
J

 $_SESSION non era attiva)
bastava chiedere. sarò pure neofita, ma non ci vuole nulla a chiedere al
provider la versione del php.

 funzioni?
Non mi pare che il manuale manchi di chiarezza in proposito.
Se preferisci leggilo in italiano:
http://it.php.net/manual/it/ref.session.php
Se poi hai dei dubbi chiedi nello specifico.
---
Le proposte sono sempre capite dagli altri in maniera diversa da come le 
concepisce chi le fa.

 funzioni?
per motivi di sicurezza e di usabilità del codice la raccomandazione è di
settare register_globals a OFF in php.ini
http://www.php.net/manual/it/security.registerglobals.php
la differenza è che con register_globals a ON le variabili di sessione,
get, post sono registrate come variabili globali.
http://www.php.net/manual/it/configuration.directives.php#ini.register-globals



C'č phpinfo(); che ti dice queste cose, senza dover chiedere al tuo isp
Ciao
j

> Se poi hai dei dubbi chiedi nello specifico.
session_start ()
apro la sessione e php  assegna un id ad ogni connessione, giusto?
$_SESSION["authorizer"]  = array ("username" => $username, "livello" =>
$livello[0]);
registro un array (authorizer) contenente due variabili.
Cambio pagina e apro di nuovo la sessione con
session_start ()
con la seguente invece assegno alla variabile $authorizer l'array contenuto
nella $_SESSION
$authorizer= $_SESSION;
cos'è materialmente $_SESSION? cosa contiene?
è un array la cui chiave authorizer contiene un'altro array?
non sarebbe più esatto scrivere
$authorizer= $_SESSION['authorizer'];  ???
perchè dunque mi risulta falsa la seguente?
isset($autorizer['authorizer']["livello"])
ho provato anche ad usare
$authorizer= $_SESSION['authorizer'];
isset($autorizer["livello"])
ma non va...
perchè?

 isset($autorizer['authorizer']["livello"])
Forse perchè nel primo script non hai settato $livello[0]?
Non so... è un'ipotesi.
Comunque fai così...
Se non vuoi impazzire con queste cose impara ad usare print_r con il 
quale di solito risolvi questo genere di problemi in due secondi (o quasi)
Pagina 1:
<?php
session_start();
$username = "pinco";
$livello[0] = "5";
$_SESSION["authorizer"]  = array ("username" => $username, "livello" 
=>$livello[0]);
?>
Pagina 2:
<?php
session_start();
echo "<pre>";
print_r($_SESSION);
echo "</pre>";
?>
Così facendo verifichi se ti setta la sessione e vedi la struttura di 
$_SESSION
Prova e facci sapere cosa ti dice.
P.S. Quando programmate impostate error_reporting  =  E_ALL nel php.ini 
(se non fosse assegnata $username e tu cerchi di metterla in $_SESSION 
almeno ti segnalerebbe il notice)
---
"Basta con questa vita, voglio farmi una famiglia". "Esagerato... fatti 
solo la più carina di tutta la famiglia" (Alessandro Bergonzoni).

Oddio, mi vergogno come un ladro...
ecco l'errore:
$authorizer= $_SESSION;
if (isset($autorizer['authorizer']["livello"])){
come vedete le due variabili non sono uguali...
$autorizer
$authorizer
be che dire per giustificarmi...
La cosa che non mi spiego č che a volte funzionava aggiungendo delle
righe... come se ci fosse una falla nella sicurezza...
Sapreste indicarmi come fare per verificare la sicurezza del mio script
contro eventuali tentativi di intrusione?

 contro eventuali tentativi di intrusione?
A parte che qui la sicurezza centra poco... se ne è già parlato più volte:
http://groups.google.it/groups?q=sicurezza+php&ie=UTF-8&oe=UTF-8&hl=it&btnG=Cerca+con+Google
E ne parla anche il manuale:
http://it.php.net/manual/it/security.php
---
There's no place like 127.0.0.1

 $authorizer
!!!!!!!!!!!!!!!! ANCORA!!!!!!!!!!!!!
lo fa di nuovo :-/
perchč?
ieri funzionava tranquillamente....
Luciano

 ha scritto nel messaggio
news:ghSKb.25555$Jw2....@tornado.fastwebnet.it...
