Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 14
  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2007
    Messaggi
    35

    [PHP] Dati in sessione non visibili

    Ciao a tutti,

    premetto che non ho grandi conoscenze di PHP ma al momento sono costretto ad usarlo ed ho un problema con dei dati in sessione.
    Nella mia applicazione, al momento della login carico un array con tutti i dati dell'utente e lo metto in sessione.
    Tutto questo funziona perfettamente, se navigo nelle pagine "principali" i dati sono disponibili.
    Il problema è che all'interno delle pagine "principali" richiamo tramite la funzione include delle altre paginette che solitamente hanno dei menu e sono proprio i menu che devono cambiare se si è loggati o meno, ma nelle pagine incluse i valori in sessione non si vedono, la variabile $_SESSION è vuota.

    Potete dirmi quali sono le istruzioni o le impostazioni che devo controllare?

    Grazie a tutti.

  2. #2
    Ha inserito session_start() all'inizio delle pagine principali che includono i vari file con i menu?

  3. #3
    Utente di HTML.it
    Registrato dal
    Dec 2007
    Messaggi
    35
    Ho inserito all'inizio di ogni pagina l'inclusione di un file di configurazione, all'interno del quale la prima istruzione è session_start()

    Questo può creare problemi o posso lasciarlo così?

  4. #4
    Questo può creare problemi o posso lasciarlo così?
    Puoi lasciarlo cosi'.

    Sei sicuro di non richiamare session_destroy() oppure di cancellare i dati della sessione da qualche parte?

    Questo esempio funziona correttamente?

    Codice PHP:
    <?php 
    // file index.php
    session_start();
    $_SESSION['test'] = 'test';
    include(
    dirname(__FILE__) . '/menu.php');
    ?>

    <?php 
    // file menu.php
    print('<pre>');
    print_r($_SESSION);
    print(
    '</pre>');
    ?>

  5. #5
    Utente di HTML.it
    Registrato dal
    Dec 2007
    Messaggi
    35
    No, sono sicurissimo che la sessione non la distruggo nè ne cancello il contenuto, anche perchè dopo la login, in qualsiasi pagina principale (non quelle incluse), in qualsiasi punto della pagina i dati sono disponibili, ma in qualsiasi pagina inclusa la variabile $_SESSION è un array con zero elementi.

    Un'altra cosa che potrebbe essere utile è che ho due pagine "anomale", cioè pagine che non vengono visualizzate, ma eseguono delle operazioni e poi chiamano delle pagine in base all'esito, una di queste è la login, che controlla sul database e se l'utente esiste fa una redirect sulla pagina di benvenuto, altrimenti su quella di errore.

    Non so se questo possa essere la causa.

    Il tuo codice, se non è messo nelle pagine incluse, funziona anche da me.

  6. #6
    Un'altra cosa che potrebbe essere utile è che ho due pagine "anomale", cioè pagine che non vengono visualizzate, ma eseguono delle operazioni e poi chiamano delle pagine in base all'esito, una di queste è la login, che controlla sul database e se l'utente esiste fa una redirect sulla pagina di benvenuto, altrimenti su quella di errore.
    Prina di inviare l'header location per il redirect, fa attenzione a richiamare http://www.php.net/session_write_close ed aggiungi il SID all'url usato per il redirect in modo da garantire la propagazione della sessione.

    Il tuo codice, se non è messo nelle pagine incluse, funziona anche da me.
    Hai creato i due file come indicato (index.php e menu.php)?
    Richiamando index.php, cosa viene visualizzato?

  7. #7
    Utente di HTML.it
    Registrato dal
    Dec 2007
    Messaggi
    35
    Grazie mille! Ho capito il problema!
    forse se postavo il codice si sarebbe capito subito.
    In pratica ho parametrizzato la url dell'include

    codice:
    <? include($root."/header.php"); ?>
    dove $root è una variabile in un file di config.
    L'errore è subdolo perchè il contenuto della pagina viene visualizzato correttamente!

    Il problema però rimane perchè io ho necessità di sapere dinamicamente quale sia la root del server, perchè non so dove dovrò andare a pubblicare il sito, ora è in "http://localhost", ma si capisce che non sarà sempre questa la root.

    E' possibile quindi parametrizzare la url?

  8. #8
    Perché non usi una URL relativa???
    Del tipo

    Codice PHP:
    <?php
    // URL => h ttp://www.miosito.tld/header.php

    include("header.php"); 

    ?>
    Teoricamente sarebbe meglio usare una URL assoluta, ma funziona lo stesso.
    Peraltro, se proprio vuoi usare il percorso assoluto, puoi usare $_SERVER['PHP_SELF'].

    <ALCIO />
    Per cortesia: no PVT Tecnici
    ******* LINKS *******
    SRL
    MetalWave

  9. #9
    Perché non usi una URL relativa???
    I path relativi negli include sono molto pericolosi, sopratutto quando ci sono sotto inclusioni.
    Utilizzare un codice come questo rende le inclusioni portabili e non interpretabili (es. a causa dell'include_path):

    Codice PHP:
    include(dirname(__FILE__) . '/header.php'); 
    Peraltro, se proprio vuoi usare il percorso assoluto, puoi usare $_SERVER['PHP_SELF'].
    $_SERVER['PHP_SELF'] si riferisce al nome dello script richiamato dal client. Se il client richiama un URL in una directory different, gli include basati su di esso non funzioneranno correttamente.

  10. #10
    Utente di HTML.it
    Registrato dal
    Dec 2007
    Messaggi
    35
    Non posso utilizzare

    codice:
    include(dirname(__FILE__) . '/header.php');
    perchè le pagine da includere si trovano nella root, ma le pagine che chiamo si trovano in vari percorsi, quindi non verrebbero trovate le pagine da includere.
    Per quanto riguarda $_SERVER['PHP_SELF'] credo faccia la stessa cosa.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.