Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2011
    Messaggi
    420

    dubbio sessioni e include

    Ciao a tutti;
    Ho una pagina con questo codice:

    aggiorna.php
    Codice PHP:
    session_start();
    if (!isset(
    $_SESSION['id']))   {
         echo 
    "non sei loggato";
    }else{
        include (
    "aggiornamento1.php");
        include (
    "aggiornamento2.php");
        include (
    "aggiornamento3.php");

    Ognuna delle pagine richiamate aggiorna una determinata sezione ed ognuna inizia con lo stesso identico codice... ossia session_start() e il controllo della sessione attiva.
    Credevo che il meccanismo fosse corretto, ma dal richiamo del terzo file mi da questo messaggio d'errore: "A session had already been started...."
    Quello che mi chiedo è:
    1- perchè sui primi file non mi da l'errore? C'entra la bufferizzazione dell'invio dell'header?
    2- se devo eliminare il controllo sulla sessione dalle pagine incluse, come posso evitare che qualcuno richiami direttamente le paginein questione da riga di comando?
    - "Si sono vegetariano. Diciamo che non mangio nulla che abbia un cuore"
    - "E i carciofi?"

  2. #2
    Utente di HTML.it
    Registrato dal
    Oct 2009
    Messaggi
    292
    Potresti posizionare i files fuori dalla document root ed inserire solo il controllo if (!isset($_SESSION['id'])) se sono files che vengono utilizzati solo come delle inclusioni.
    Puoi sfruttare anche la funzione session_id()

  3. #3
    Utente di HTML.it L'avatar di Kups
    Registrato dal
    May 2013
    Messaggi
    20
    1. Sei sicuro che l'errore venga richiamato nel terzo file e non magari nel primo?
    2. Crea una costante nella root, poi controlli nei singoli file da includere se questa costante è definita, un esempio:

    root.php
    Codice PHP:
    <?php

    #> Fai tutti i tuoi controlli e se la tua condizione di inclusione è verificata includi i tuoi files.
    if ($ConsentiInclusioni === true) {
        
    define('ALLOW_ACCESS'true);
        include 
    'inc.file.php';
    }

    ?>

    inc.file.php
    Codice PHP:
    <?php
    #> Blocco gli accessi non consentiti
    defined('ALLOW_ACCESS') || die('Not Authorized');


    echo 
    "Ciao Mondo!";

    ?>

  4. #4
    Utente di HTML.it
    Registrato dal
    Sep 2011
    Messaggi
    420
    Originariamente inviato da arkus
    Potresti posizionare i files fuori dalla document root...
    Ciao, grazie per la risposta prima di tutto;
    Ma se anche lo posiziono fuori daslla root, se qualcuno conoscesse il percorso non potrebbe richiamarlo ugualmente semplicemente digitando l'indirizzo?


    Originariamente inviato da arkus ...ed inserire solo il controllo if (!isset($_SESSION['id'])) se sono files che vengono utilizzati solo come delle inclusioni.
    Puoi sfruttare anche la funzione session_id()
    Qui ho le idee un po' confuse...
    Io sfrutto l'id per vedere se l'utente è correttamente loggato...
    Però mi viene in mente che la procedura d'aggiornamento devo poterla richiamare solo io, quindi potrei inserire un nuovo controllo in cui verificare che l'id loggato corrisponda unicamente al mio id?
    - "Si sono vegetariano. Diciamo che non mangio nulla che abbia un cuore"
    - "E i carciofi?"

  5. #5
    Utente di HTML.it
    Registrato dal
    Sep 2011
    Messaggi
    420
    Originariamente inviato da Kups
    1. Sei sicuro che l'errore venga richiamato nel terzo file e non magari nel primo?
    2. Crea una costante nella root, poi controlli nei singoli file da includere se questa costante è definita, un esempio:

    root.php
    Codice PHP:
    <?php

    #> Fai tutti i tuoi controlli e se la tua condizione di inclusione è verificata includi i tuoi files.
    if ($ConsentiInclusioni === true) {
        
    define('ALLOW_ACCESS'true);
        include 
    'inc.file.php';
    }

    ?>

    inc.file.php
    Codice PHP:
    <?php
    #> Blocco gli accessi non consentiti
    defined('ALLOW_ACCESS') || die('Not Authorized');


    echo 
    "Ciao Mondo!";

    ?>
    Ciao, grazie anche a te per le info...
    L'errore ha iniziato a darmelo quando ho inserito il 3° file di aggiornamento... per questo mi veniva in mente potesse essere dato dal riempimento del buffer e quindi un nuovo invio degli header o qualcosa del genere...

    L'esempio che mi hai fatto, per quanto semplice, mi risulta complicato! Il file che chiami root.php dovrebbe essere il mio file aggiorna.php che include i vari sott-file di aggiornamento? Quali dovrebbero essere i controlli per consentire le inclusioni? Per me la procedura di aggiornamento è unica, ho preferito spezzarla in più file solo per migliorarne la gestione e la leggibilità, ma una volta che parte il file aggiorna.php devono partire anche i vari aggiorna1, aggiorna2 aggiorna3 ecc
    - "Si sono vegetariano. Diciamo che non mangio nulla che abbia un cuore"
    - "E i carciofi?"

  6. #6
    Utente di HTML.it
    Registrato dal
    Oct 2009
    Messaggi
    292
    I files all'esterno della document root non sono direttamente accessibili....
    comunque tornando ai due consigli che ti sono stati dati:

    session_start();
    if (!isset($_SESSION['id'])) {
    echo "non sei loggato";
    }else{
    $logged = true;
    include ("aggiornamento1.php");
    include ("aggiornamento2.php");
    include ("aggiornamento3.php");
    }



    nei files aggioramentoX.php invece che rifare il controllo sulla sessione fai il controllo sulla variabile logged

    if(!isset($logged) || $logged !== true){
    echo "non sei loggato";
    exit;
    }




    oppure utilizzando session_id

    in aggioranmentoX.php

    if(empty(session_id())) session_start();
    poi controllo su $_SESSION['id']


    La prima strada è più "elegante"

  7. #7
    Utente di HTML.it
    Registrato dal
    Sep 2011
    Messaggi
    420
    Ok è chiaro è semplice...

    Ne approfitto per farti un'altra domanda;
    C'è un modo per far scadere tutte le sessioni attive in un dato momento?
    Ossia, nel momento in cui io richiamo la procedura di aggiornamento, se c'è qualche utente loggato, potrebbe trovarsi ad operare con dati inconsistenti e generare dei casini, ma se in qualche modo all'avvio del file aggiornamento.php riuscissi a chiudere tutte le sessioni attive costringendo l'utente a fare nuovo log in, si ritroverà i dati aggiornati risolvendo il problema a monte...
    Come si opera in questi casi?
    - "Si sono vegetariano. Diciamo che non mangio nulla che abbia un cuore"
    - "E i carciofi?"

  8. #8
    Utente di HTML.it
    Registrato dal
    Oct 2009
    Messaggi
    292
    Di solito utilizzo una semplice variabile bandiera, un pò come per il controllo del login.
    Sia quando sfrutto il pattern mvc, ma anche ai tempi del procedurale ,di norma utilizzo un file di configurazione che viene sempre incluso, all'interno è presente una variabile che se è ad esempio impostata a true rappresenta lo stato di manutenzione, di conseguenza viene stampato un messaggio di avviso appena un utente proverà a caricare una nuova pagina.
    Lo stato "manutenzione" può anche essere salvato in database, dipende un pò dalle esigenze.

    Come dicevo, un pò come per il controllo del login, se la variabile manutenzione è true stampi un messaggio (o carichi la pagina apposita) e blocchi l'esecuzione.

    Magari altri utenti sapranno indicarti altri metodi, io procedo così.

  9. #9
    Utente di HTML.it
    Registrato dal
    Sep 2011
    Messaggi
    420
    Ok... mi sembra un metodo semplice ed efficace.. per ora procedo così...
    Grazie 1000
    - "Si sono vegetariano. Diciamo che non mangio nulla che abbia un cuore"
    - "E i carciofi?"

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.