Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 16

Discussione: SESSIONI e DNS

  1. #1

    SESSIONI e DNS

    Salve a tutti, ho un problema che mi sta facendo uscire pazzo, la situazione è questa:

    Ho uno script uno.php fatto così:

    Codice PHP:
    <?
    session_start
    ();
    $session_id session_id();
    print 
    "SESSIONID = $session_id";
    $_SESSION['PROVA']=1;
    header("location: due.php"); 
    exit;
    ?>

    Lo script due.php è fatto così:

    Codice PHP:
    <?
      session_start
    ();
      
    $prova $_SESSION['PROVA'];
      print 
    "$ciccio";
      exit;
    ?>

    il webServer è IIS è su un server win2003 che si trova in una intranet aziendale,

    Ora, se punto questa pagina così:

    http://nomeserver/uno.php

    Funziona alla grande, cioè viene creata la sessione (ho verificato che la scive su file nel path corretto indicato nel php.ini) e viene chiamato lo script due.php che vede correttamente il valore di $prova

    E fin qui OK, però c'è un maledetto DNS (che non gestisco io e non so come funziona) che in sostanza al mio webserver;
    in questo caso se chiamo lo script con:

    http://NOMEDNS/uno.php

    lo script uno.php crea la sua sessione (e infatti scrive sul filesystem il file di sessione), ma poi quando richiama due.php questo perde la sessione e ne crea una nuova (infatti mi crea un nuovo file su filesystem) e ovviamente non sa valorizzare $prova

    Le ho provate tutte, ma non riesco proprio a capire da cosa dipende.

    Ora io avevo messo su 2 soluzione (che non mi piacciono per niente) e che sono:

    1) Mettere come index.php uno script che fa una redirect usando il nomeserver, cioè una cosa simile:
    Codice PHP:
    <?
       header
    ("location: [url]http://NOMESERVER/uno.php[/url]"); 
    ?>
    In questo modo bypasso il DNS e funziona (ma questa cosa non piace ai responsabili !!!)

    2) ancora più brutta:
    Uso il DNS ma lo script uno.php quando chiama due.php gli passa come parametro la sessione, appena avvio due.php setto session_id con questo parametro e la cosa funziona... ma è un vero schifo....

    Come posso fare per far funzionare la cosa senza fare questi salti mortali...

    PS. credo che il problòema sia proprio del DNS perchè nell'altra modalità funziona correttamente....

    Ciaoooo
    www.mtbvolturno.it

  2. #2
    Non usare lo short open tag, utilizza il tag di apertura completo.
    L'header location richiede un URL assoluto (completo di protocollo, dominio, etc.), non relativo.
    Nello script 2 la variabile $ciccio NON è definita.

  3. #3
    Utente di HTML.it L'avatar di neroux
    Registrato dal
    Aug 2009
    Messaggi
    1,973
    Il redirect di uno.php non dovrebbe funzionare perché fai un print. Poi che cos'è la differenza tra nomeserver e nomedns?

    www.sitemeer.com » Quando un sito pare irraggiungibile

    Se ti piace ci puoi trovare anche su Facebook

  4. #4
    Utente di HTML.it L'avatar di luca200
    Registrato dal
    Apr 2002
    Messaggi
    4,120
    Originariamente inviato da filippo.toso
    L'header location richiede un URL assoluto (completo di protocollo, dominio, etc.), non relativo.
    Il problema deriva da questo. Non usare un redirect relativo. E poi un header NON E' UN LINK!!

  5. #5
    Utente di HTML.it L'avatar di neroux
    Registrato dal
    Aug 2009
    Messaggi
    1,973
    Originariamente inviato da luca200
    Il problema deriva da questo. Non usare un redirect relativo.
    Perché lo pensi? Secondo la specificazione dovrebbe essere un URL completo, ma non consco un browser che non sia capace di trattare anche un URL relativo, quindi ....

    Originariamente inviato da luca200
    E poi un header NON E' UN LINK!!
    Grazie al parser di vbulletin

    www.sitemeer.com » Quando un sito pare irraggiungibile

    Se ti piace ci puoi trovare anche su Facebook

  6. #6
    Rispondo un po' a tutti facendo qualche chiarimento:

    Gli script uno.php e due.php sono degli "estratti" degli script interi, anche per questo c'è qualche cosa di strano (tipo $ciccio)


    Allora:
    Non usare lo short open tag, utilizza il tag di apertura completo.
    Già fatto, negli script veri (per caso) c'era <?php in ogni caso nel php.ini ho abilitato l'utilizzo degli short open tag

    L'header location richiede un URL assoluto (completo di protocollo, dominio, etc.), non relativo.
    Anche questo già fatto, e non cambia niente

    Nello script 2 la variabile $ciccio NON è definita.
    Si è vero erano delle prove che avevo fatto ed era rimasta li, nello script vero c'è
    print "$prova"; (Mi ero molto innervosito e avevo usato nomi di variabili che non potevano essere postate qui sul forum, allora le ho cambiate per postare quei ed è rimasto qualcoisa fuori posto... )

    Il redirect di uno.php non dovrebbe funzionare perché fai un print. Poi che cos'è la differenza tra nomeserver e nomedns?
    No il redirect funziona benissimo, solo che quando chiamo due.php questo perde la sessione e ne apre una nuova, solo quando uso il DNS, qui forse devo spiegare un po' meglio, perchè forse non sono stato chiaro, e riposndo pure a:
    Poi che cos'è la differenza tra nomeserver e nomedns?
    Allora NOMESERVER è il vero nome del server windows2003 (sarebbe hostname)
    Es. SRV2003
    quindi quando io metto nell'indirizzo del browser:
    http://SRV2003/uno.php
    questo funziona perfettamente: cioè chiama due.php, e avendo valorizzato nello script uno.php la var. di sessione $_SESSION['PROVA']=1; mi printa a video 1
    infatti due.php non fa altro che avviare le sessioni e stampare $prova (ripeto $ciccio è una mia svista, il cosdice è print $prova)

    Ora, c'e' un DNS (che io non gestisco e non so nemmeno come funziona) che in sostanza mi permette di scrivere nella barra degli indirizzi del browser:

    http://server.esercizio/uno.php e il DNS risolve server.esercizio con SRV2003
    però, IMPORTANTE, non lo traduce sulla barra degli indirizzi, cio' li ci resta sempre http://server.esercizio/.....


    Altra precisazione, io NON posso fare un redirect fatto in questo modo:
    codice:
    header("location: http:\\SRV2003\due.php");
    perchè in questo caso verrebbe "scoperto" il nome del server, (che non so per quale motivo non vogliono che accada)
    ma posso fare solo un redirect di questo tipo:


    codice:
    header("location: http:\\server.esercizio\due.php");
    oppure

    codice:
    header("location: due.php");
    Che tanto funziona uguale...

    Perchè, ed è qui che voglio sottolineare il problema, il redirect funziona, cioè lo script due.php viene richiamato sempre in tutti i casi, il vero problema è che la variavbile di sessione PROVA nel caso in cui uso il DNS viene persa, cosa che invece non accade se chiamo lo script uno.php senza DNS ( http://SRV2003/uno.php )

    Del fatto che si perde la sessione, ne sono assolutamente certo, infatti come dicevo nel primo post, nella diretory c:\windows\temp (dove vengono scritti i file che contendgono le variabili di sessione), quando NON uso il DNS, viene scritto un unico file al momento della chiamata dello script uno.php, poi quando viene richiamato lo script due.php, avendo anche questo la stessa session_id, richiama sempre quel file e quindi il tutto funziona.

    Viceversa quando richiamo uno.php USANDO il DNS, viene subito scritto un primo file di sessione, ma quando poi, uno.php richiama due.php, ne viene generato un altro (ovviamente vuoto, perchè nello script due.php non si settano variabili di sessione) e quindi la variabile di sessione PROVA non può essere valorizzata, questo è il vero problema.


    Lo so mi sono dilungato un po' troppo, ma è perchè si stava spostando l'attenzione su un finto problema (quello del redirect) quando invece il VERO PROBLEMA è la perdita della sessione.

    Io sto rivoltando internet, ma non ho trovato ancora niente a riguardo...
    Aiutatemi se potete...
    grazie a tutti anticipatamente...
    www.mtbvolturno.it

  7. #7
    Utente di HTML.it L'avatar di luca200
    Registrato dal
    Apr 2002
    Messaggi
    4,120
    Originariamente inviato da fmc_alfredo

    Che tanto funziona uguale...
    Vedo che sai già tutto, non capisco cosa vieni a chiedere

    Allora:
    1) Quando posti codice, posta il codice "vero", come lo chiami tu, non roba scritta a caso
    2) Ti è già stato detto di non usare un redirect relativo. Io te lo ripeto ora, e non lo ripeterò di nuovo.


  8. #8
    ll fatto è che non so proprio un bel niente, altrimenti non sarei qui a chiedere aiuto

    Allora riposto il codice VERO:

    Questi sono i nomi del server e del dns che lo risolve:
    Hostname: ASRV5560
    DNSNAME: access_ict.t3m

    questi invece i codici VERI.

    uno.php
    <?PHP
    session_start();
    $_SESSION['PROVA']=1;

    // Così NON FUNZIONA
    header("location: http://access_ict.t3m/due.php");

    // Così FUNZIONA
    // header("location: http://ASRV5560/due.php");

    exit;
    ?>
    due.php

    <?PHP
    session_start();
    $prova = $_SESSION['PROVA'];
    print "VAR PROVA = $prova";
    ?>

    C'è un'altra cosa da mettere in evidenza:

    Se richiamo lo script uno.php così: (usando il dns)

    http://access_ict.t3m/uno.php

    NON funziona con nessuno dei due metodi di header location, cioè anche se uno.php richiama due.ph con il metodo:

    header("location: http://ASRV5560/due.php"); NON FUNZIONA.

    Quindi per far funzionare queste benedette variabili di sessione devo chiamare lo script uno.php in questo modo:

    http://ASRV5560/uno.php

    e lo script uno.php al suo interno deve richiamare due.php con questo metodo:

    header("location: http://ASRV5560/due.php");

    Come vedi sto usando un redirect assoluto e non funziona comunque.
    Secondo me è qualcosa che avviene usando quel maledetto dns che in qualche modo fa capire al browser di ricreare una nuova sessione nel momento in cui si chiama la pagina due.php

    Se qualcuno ha altri suggerimenti... io sono a corto di idee...
    www.mtbvolturno.it

  9. #9
    Utente di HTML.it L'avatar di luca200
    Registrato dal
    Apr 2002
    Messaggi
    4,120
    Il redirect assoluto non lo devi fare scrivendo a mano il nome del dominio o del server, visto che lo script è richiamabile in più maniere. Devi avere una funzione che si trova da sola il dominio e lo mette nell'header

    Codice PHP:
    function redirect($file$absolute=false) {
        if (! 
    $absolute) {
            
    $address dirname(PHP_SELF);
            
    $last substr($address,-1);
            if (
    $last != '/' && $last != 'xxx'$address.='/';
            
    $address .= $file;
        } else 
    $address $file;
        
    header("Location: $address");
        die();
    }
    redirect('due.php'); 
    Attento, il parser del forum mi sta incasinando il codice. Al posto della tripla xxx devi mettere un doppio backslash (sempre fra apici)

  10. #10
    Provato... niente da fare non funge...

    La tua funzione è OK, se richiamo lo script uno.php così:

    http://ASRV5560/uno.php

    questo fa il redirect a due.php e nella barra degli indirizzi c'è:
    http://ASRV5560/due.php

    e la variabile viene passata (cioè $prova = 1)


    SE INVECE richiamo lo script così:
    http://access_ict.t3m/uno.php

    Il redirect funziona sempre ma nella barra degli indirizzi appare giustamente così:
    http://access_ict.t3m/due.php

    ed in questo caso la var. $prova NON è valorizzata.

    Ripeto, secondo me è un probl. che sta nel DNS, ma li non posso metterci le mani.


    PS.
    pure a me quando inserivo il codice nei tag PHP /PHP mi fa dei casini, ho usato il tag QUOTE /QUOTE


    IO continuo la ricerca... ma credo proprio che dovrò arrendermi e passare il SID come parametro aggiuntivo sull'URL (bruttissimo) !!!


    Ho provato pure a richiamare due.php NON con header location... ma con il tag html

    <META HTTP-EQUIV=refresh CONTENT="0;URL=http://access_ict.t3m/due.php">

    Niente da fare... non funge...

    Chiaramente se metto
    <META HTTP-EQUIV=refresh CONTENT="0;URL=http://ASRV5560/due.php">
    funziona...

    Il problema sta nel fatto che quando uso il DNS, il browser avvia una seconda sessione quando richiamo due.php e di questo ne sono certissimo visto che mi crea un nuovo file di sessione in C.\windows\temp


    Io non so più che altro pensare...
    www.mtbvolturno.it

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 © 2026 vBulletin Solutions, Inc. All rights reserved.