Allora, stavo lavorando per postare:
Non posso postare il link perché il server è interno.
La pagina handleuser.php include un file "lib.inc.php"
Codice PHP:
<?php
require($_SERVER['DOCUMENT_ROOT']."/utility/PhpStdLibrary/class.DBSession.php");
require($_SERVER['DOCUMENT_ROOT']."/utility/PhpStdLibrary/class.SessionHandler.php");
require($_SERVER['DOCUMENT_ROOT']."/utility/PhpStdLibrary/class.DBHandler.php");
require ($_SERVER['DOCUMENT_ROOT']."/utility/PhpStdLibrary/class.DataValidator.php");
require ($_SERVER['DOCUMENT_ROOT']."/utility/PhpStdLibrary/class.SimpleXHTMLSanitizer.php");
require ($_SERVER['DOCUMENT_ROOT']."/utility/PhpStdLibrary/class.UserLicense.php");
require($_SERVER['DOCUMENT_ROOT']."/utility/include/config.inc.php");
try
{
$db = new DBHandler($dataConn, DB);
$db->queryDb('SET NAMES utf8');
}
catch(Exception $e)
{
exit("Service not available");
}
$sess = new DBSession($db, 'utility_session_data',
array(
'id' => 'sessid',
'data' => 'datasess',
'expire'=> 'expire'
));
// Fa in maniera che la sessione non si aggiorni continuamente
// ad ogni chiamata di una pagina
$sess->setMaxLifeTime(-1);
$sessionHdl = new SessionHandler(
$db->getConnectionLink(),
// Dati locked IP (Tabella, nomi campi)
$lockedTableName, $lockedTableFlds,
// Dati access log (Tabella, nomi campi)
$accessTableName, $accessTableFlds,
// Dati error access log (Tabella, nomi campi)
$erraccTableName, $erraccTableFlds
); // *** COSTRUITO L'OGGETTO SessionHandler ***
// Effettua il controllo sulla validità della sessione
// Se non si loggati o c' stato il tentativo di modificare il session_id
// viene visualizzato un messaggio di errore.
if(!$sessionHdl->isLogged() && $_REQUEST['action'] != 'LOGOUT')
{
exit("<h1>HTTP/1.0 404 Not Found</h1>");
}
else
{
$ul = new UserLicense($_SESSION['userdata']['id_user'],
$db->getConnectionLink(),
$permTableData,
$actionsAllowed,
$userTableField,
DB);
}
?>
Non posso postare l'intera classe SessionHandler ma solo il metodo all'interno del quale si verifica il blocco.
Ho provato ad eseguire un exit(print_r($_REQUEST, true)) fino a trovare che prima della riga
if (session_id() == '') session_start(); // Avvia sessione se
lo esegue, dopo no!
(Nella classe "SessionHandler")
Codice PHP:
public function isLogged() {
$isLogged = FALSE;
if (session_id() == '') session_start(); // Avvia sessione se necessario
if (isset($_SESSION['logged']) && ($_SESSION['logged']==TRUE)) {
// Controlla IP e User-Agent, se richiesto
if($this->opt != NULL) {
if (($this->opt & self::CHECK_IP) != 0) {
// Deve controllare IP ADDRESS (se settato nella sessione)
if (strcmp($_SESSION['remoteip'], $this->getUserIPAddress()) == 0) {
$isLogged = TRUE;
}
else {
$isLogged = FALSE;
}
}
if (($this->opt & self::CHECK_UA) != 0) {
// Deve controllare USER-AGENT (se settato nella sessione)
if (strcmp($_SESSION['remoteua'], $this->getUserAgentMd5()) == 0) {
$isLogged = TRUE;
}
else {
$isLogged = FALSE;
}
}
}
else {
$isLogged = TRUE; // Non servono controlli su altri parametri
}
}
// Se non è passato nell'if sopra vuol dire che L'UTENTE NON È LOGGATO
return $isLogged;
}
L'exit restituisce l'id della sessione e la sessione (essendo salvata nel db) esiste e contiene i dati che deve contenere. (P.S. sono anni che usiamo queste librerie, e non hanno mai dato questo problema!)
Grazie