Le variabili di sessione non sono mantenuti tra il caricamento della pagina

Qualcuno mi può dire perché la sessione di vars non sono di passaggio tra le pagine? Stavano lavorando fino a 2 giorni fa. Ora il suo non? C’è un terzo sistema che registra gli utenti in base al sistema terze parti. Ho indirizzare gli utenti alla pagina di login con l’url di ritorno. Il terzo registri di sistema di un utente e pass di un documento d’identità e un token generato sulla loro fine e li restituisce al mio sito con l’id e il token nell’url.

Se le sessioni non sono impostate provo a recuperare l’id e il token da url e impostare le sessioni. (di lavoro) ho poi creare la mia token per validare il token passato dal terzo sistema (di lavoro) quando vado a fare clic su un’altra pagina sessioni che ho impostato non sono vuote (????)

Ecco il mio codice:

    <?php
    session_start();

    //FUNCTION TO PASS THE URL THE USER IS ON SO THEY COME 
    //BACk TO THIS PAGE AFTER THE LOG IN. IF APPLICABLE
    function curPageURL() {
    $pageURL = 'http';
    if ($_SERVER["HTTPS"] == "on") {$pageURL .= "s";}
    $pageURL .= "://";
    if ($_SERVER["SERVER_PORT"] != "80") {
    $pageURL .= $_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"];
    } else {
    $pageURL .= $_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"];
    }
    return $pageURL;
    }

    //DESTROY SESSION INFO IF TIMED OUT
    if (isset($_SESSION['LAST_ACTIVITY']) && (time() - $_SESSION['LAST_ACTIVITY'] > 1800)) {
    session_destroy();   //destroy session data in storage
    session_unset();     //unset $_SESSION variable for the runtime
    }

    //SET THE SESSIONS WITH INFO PASSED FROM
    //LOGIN PAGE SENT AS A GET
    if(isset($_SESSION['ID']) && isset($_SESSION['token'])) {}else{
    $_SESSION['ID'] = $_GET['ID'];
    $_SESSION['token'] = $_GET['token'];
    }

    //GENERATE MY TOKEN TO MATCH THE LOGIN SYSTEM TOKEN
    $userIP = $_SERVER['REMOTE_ADDR'];
    $secretkey = 'A Unique Key For The Logged In User Matching the Login System Passed From mydomain.com/login.php';
    $algorithm = 'md5';
    $mm = date('m');
    $dd = date('d');
    $mmdd = $mm.$dd;
    $mytoken = strtoupper(hash($algorithm, $secretkey.$_SESSION['ID'].$userIP.$mmdd));


    $_SESSION['LAST_ACTIVITY'] = time(); //update last activity time stamp
    //THIS IS WHERE THINGS ARE GOING WRONG
//SESSION token IS NO LONG SET AFTER I Go To another page
//and my token isnt the same any more either because session ID
//is no longer set???
    if($_SESSION['token']==$mytoken){}else{
    header("location: https://mydomain.com/login.php?returnURL=".curPageURL());
    }
    ?>

ok, questo è incasinato. Deve essere un problema del provider di hosting PHP installazione, penso, perché ho creato due pagine. uno che si chiama info con questo codice:

<?
session_start();

$_SESSION['ID'] = "112233";
$_SESSION['token'] = "mytoken";

print $_SESSION['ID'];
print $_SESSION['token'];
?>
<a href="info2.php">info 2</a>

e uno chiamato info2 con questo codice:

<?
session_start();

print $_SESSION['ID'];
print $_SESSION['token'];
?>
<a href="info.php">info</a>

info creata e stampata la sessione su ok. quando clicco sul link per andare info2 le sessioni non stampa. È questo un hosting config problema?

  • Io sto avendo lo stesso problema … tranne la mia roba è su localhost, utilizzando PHP con IIS
InformationsquelleAutor user520300 | 2011-06-01



9 Replies
  1. 17

    Come già accennato, assicurarsi che si sta chiamando session_start() su ogni pagina.

    Inoltre, sono gli script su diversi sottodomini?? Se sono, si deve impostare il file INI di valore session.cookie_domain per .DOMAIN.EXT.

    Ulteriormente il debug di tutta questa situazione, fare qualche semplice cookie guardando. Vedere se PHPSESSID è presente un cookie, sia le richieste di pagina, se non, allora questo è il vostro problema. Non è possibile memorizzare i cookie cross-dominio a meno che non li si ricompone.


    In risposta ad un tuo aggiornamento, provate a fare questo sotto la vostra chiamata a session_start():

    echo session_id();

    Confermare che è la stessa su entrambe le pagine. Se non, controllare il valore di session.cookie_domain come questo:

    echo ini_get('session.cookie_domain');

    È che insieme a qualcosa? Per impostazione predefinita dovrebbe essere vuoto, se è impostato, soprattutto non per il tuo dominio, questo è il problema.

    Si può anche provare il debug il valore del cookie di PHPSESSID come ho suggerito prima.

    • vedere il mio aggiunta al post orig
    • Aggiornato risposta un po’.
    • non ho provato questo, ma lo farò. Domanda… se per impostazione predefinita eco ini_get(‘session.cookie_domain’); non è vuoto e non è il mio dominio, che faccio?
    • 2 Opzioni, 1: Contattare il tuo fornitore di hosting, perché è sbagliato, 2: È possibile utilizzare ini_set('session.cookie_domain', '.your.domain'); o ini_set('session.cookie_domain', ''); prima session_start().
    • As already mentioned, ensure you're calling session_start() on each page., sempre la risposta più semplice che elludes me. Applausi Rudi, complimenti punti per te!!
    • Ho controllato tutte queste cose, e ancora non è possibile ottenere Sessione a persistere. Vedo PHPSESSID set, ma il mio $_SESSION variabili non sono il compimento di caricamento della pagina successiva.

  2. 7

    Check List

    1. Assicurarsi che avete usato session_start(); nella pagina successiva.

    2. Si utilizza .il file htaccess?

        in questo caso, rimuovere la .il file htaccess e controllare lo stesso.

        qualche tempo le regole di riscrittura causa sessione probs…

    3. Se la sessione di sta lavorando bene e hai problemi solo con token, quindi controllare il token inviato url url_encoded.

    • vedere il mio aggiunta al post orig
    • ho verificato che l’aggiunta. questo problema potrebbe essere a causa della configurazione del server. verificare con il proprio fornitore di hosting.
  3. 3

    non è il server di hosting problema…

    controllare il vostro Url

    se un utente fa il login sotto “example.com” sessione saranno conservati per “example.com” e non “WWW.example.com” quindi, se il link va a http://www.example.com non avrà la sessione.

    è possibile utilizzare htaccess per sempre impostare l’url per “WWW.example.com” l’uso di seguito codice

    RewriteEngine On

    RewriteCond %{HTTP_HOST} ^hemantjadhav.com$ [NC]

    RewriteRule ^(.*)$ http://www.hemantjadhav.com/$1 [L,R=301]

    (sostituire hemantjadhav con il tuo nome di dominio)

  4. 2

    Controllare la dimensione del file di sessione: (codice preso da questo post)

    $sessionfile = ini_get('session.save_path') . '/' . 'sess_'.session_id();  
    echo 'session file: ', $sessionfile, ' ';  
    echo 'size: ', filesize($sessionfile), "\n";

    Se il tuo file di sessione è zero dimensioni, assicurarsi che ci sia ancora spazio su disco disponibile sul server. Questo è il problema che ho avuto.

    Controllare lo spazio su disco con df -h su un server linux.

    • grazie a voi ho visto la mia cartella non avere il giusto diritto di accesso.
  5. 1

    La risposta a questo è stato un hosting errore di configurazione. Società di Hosting cambiato qualcosa e ha lavorato da sempre.

    • Sarebbe bello sapere cosa.
  6. 0

    Nel mio caso la soluzione è stata quella di avere diversi nomi di parametro in $_GET e $_SESSION.

    $_SESSION["businessid"] = $_GET["businessid"]; //Leads to problems with session.
    $_SESSION["business_id"] = $_GET["businessid"]; //Works perfectly.

    Suona strano, ma questa è la mia esperienza.

  7. 0

    Vorrei aggiungere che ho preso con lo stesso problema, tranne che nel mio caso la pagina è stata dietro Vernice caching proxy e ho perso la configurazione di base di una riga in cui i cookie sono stati ammessi solo su percorsi specifici, altrimenti sarebbero state rimosse con la seguente direttiva:

    unset req.http.cookie;

    Non dimenticare anche controllare le impostazioni del proxy.

  8. -1

    Non hai chiamata session_write_close()

    • dove posso chiamare questo?
    • Sarebbe probabilmente alla fine dello script. Scrive i dati della sessione e chiude la sessione, così ogni volta che hai finito con la sessione di cose belle. Direi solo alla fine dal momento che session_start() è la prima cosa da fare.
    • provato… non funziona. quando vado a fare clic su per passare a un’altra pagina le mie sessioni sono ancora vuota
    • Non c’è bisogno di fare tutto questo.
    • Concordante con @rudi_visser: php.net/session_write_close – “i dati della Sessione è di solito memorizzato dopo il tuo script è terminato senza la necessità di chiamare session_write_close()”.
    • vedere il mio aggiunta al post orig

Lascia un commento