Newsgroup: it.comp.www.php
Titolo: Problema con Register Globals

Non capisco dov'č l'errore:
(1)-------------------------------------------------------------------------
-------------------------
ho una pagina con il seguente codice:
session_register("autorizer");
 $autorizer = array ("username" => $username, "password" => $password,
"livello" => $livello[0]);
    header("location: admin.php?action=home");
(2)-------------------------------------------------------------------------
-------------------------
admin.php č cosě strutturata:
<?php
require_once("mainfile.php");        // istruzioni come la funzione safe_set
()
safe_set ($_GET["action"], "");    // inizializa la variabile action
function home() {
include("autorizer/home.php");    // include il file in questione
}
switch($_GET["action"]) {
 case "home":
    home();
    break;
}
?>
(3)-------------------------------------------------------------------------
-------------------------
Questo č il file home.php (nella sua parte che ci interessa)
<?
  $request_livel = 2;
  include "autorizer/auth.php";
?>
// seguono altre istruzioni
(4)-------------------------------------------------------------------------
-------------------------
"autorizer/auth.php" contiene il seguente codice:
<?
  session_register("autorizer");
  if (isset($autorizer["livello"])){                            // ---->
questa if risulta falsa
    if ($autorizer["livello"]<$request_livel){
      require "autorizer/low_livel.htm";
      exit;
    }
  } else {
    header ("location:admin.php?action=login");      // ---> questo č il
risultato che genera lo script
  }
?>
(END)-----------------------------------------------------------------------
---------------------------
Lo script mi ritorna a ("location:admin.php?action=login") [vedi punto (4)]
quindi č falsa la if (isset($autorizer["livello"])
questo accade perchč l'array $autorizer non ha la voce 'livello'.
Eppure l'errore non č nel punto (1) in quanto il DB dal quale si ricava il
valore non restituisce l'errore.
Credo che sia un problema legato alle Register Globals che non vengono
gestite bene nei vari include.
Non ho capito come mi devo comportare con gli include.
Lo script originario non era adeguato alle Register Globals ne usava gli
switch di cui al punto (2)
In particolare credo che l'array di cui al punto (1):
    $autorizer = array ("username" => $username, "password" => $password,
"livello" => $livello[0]);
non viene passato alle altre pagine.
Lo devo richamare? come lo richiamo?
Grazie per l'attenzione
Luciano Amodio


Ho cambiato session_register() con session_start ()
poi ho richiamato autorizer in questo modo
session_start();
  $autorizer = $_SESSION["autorizer"];
come ho letto nelle faq e sul sito 
php.net
Aveva funzionato. Ero felice.
Poi ho cambiato qualcosa e non ha funzionato più. Non mi sembra di aver
toltoqualcosa di importante, tant'è che non ricordo cos'era.
Ho letto su 
php.net
 di un problema con IIS che credo sia il server usato dal
provider:
SESSION LOST ON HEADER REDIRECT (CGI on IIS 5.0)
On the **CGI** version of PHP on IIS 5.0/Windows 2000, the following code
will not work as expected:
/***** sess1.php *****/
session_start();
$_SESSION["key1"] = "testvalue";
header("Location: sess2.php");
/***** sess2.php *****/
session_start();
echo "key1 = '".$_SESSION["key1"]."'";
PROBLEM:
All session data is lost after a header redirect from the first page on
which the session is initialized. The problem is, the PHPSESSID cookie is
not being sent to the browser (ANY browser, IE or Mozilla) on the initial
session page with the header("Location: ...") redirect. This is unrelated to
client cookie settings - the set-cookie: header just isn't sent.
non sono sicuro che sia questo il problema.
Un'altro dubbio nasce dal fatto che $autorizer è un array e non so come si
comporta $_SESSION["autorizer"]; con gli array.
L'ERRORE  è il seguente:
Uninitialized string offset: 0
e si riferisce a questa riga
if (isset($autorizer["livello"])){
Grazie per l'ascolto
Luciano


in particolare vorrei sapere se c'è un modo per sostituire
$autorizer["livello"]
logicamente mi verrebbe da fare così:
$_SESSION["autorizer"]["livello"]
ma non credo sia la sintassi giusta...
Lux