2010-06-03 16 views
10

Ho letto il manuale php per questo problema e sembra piuttosto un problema comune ma non ho ancora trovato una soluzione. Sto salvando le sessioni in un database. Il mio codice è il seguente:PHP: la sessione non viene salvata prima del reindirizzamento dell'intestazione

// session 
$_SESSION['userID'] = $user->id;   
header('Location: /subdirectory/index.php'); 

Poi in cima index.php dopo la session_start(), ho var_dumped il $ _SESSION globale e l'userID non è in là. Come ho detto ive ha esaminato il manuale PHP (http://php.net/manual/en/function.session-write-close.php) e né session_write_close o session_regenerate_id(true) ha funzionato per me. Qualcuno conosce una soluzione?

Modifica: Ho session_start() nella parte superiore del mio file. Quando var_dump la sessione globale prima del reindirizzamento dell'intestazione, vedo l'ID utente lì, ma non nell'altro file, che si trova in una sottodirectory di questo script

+0

Sei 'session_starting()' dove esegui il reindirizzamento? –

+0

e sei sicuro che $ user-> id è impostato? – ahmet2106

+0

Ciao, per favore vedi il commento che ho lasciato per il post di @ ahmet2106 – phpNutt

risposta

0

Hai un session_start(); sulla cima?

non testato, ma cant si fa qualcosa di simile:

session_start(); 
$_SESSION['userID'] = $user->id; 
if($_SESSION['userID'] == $user->id) 
{ 
    header('Location: /index.php'); 
} 

ho mai avere questo problema prima, interessante

+0

Sì, lo so. Quando var_dump la sessione globale prima del reindirizzamento dell'intestazione, è lì dentro, proprio non è quando vado a un nuovo file in una sottocartella dello script originale – phpNutt

+0

@Matt divertente, ma è davvero interessante, perché dovrebbe essere impostata la Sessione, forse qualsiasi altro codice sta cancellando la tua sessione, sei sicuro che nessun altro è un session_destroy(); ? – ahmet2106

+0

Strano, ho cambiato $ _SESSION ['userID'] in $ _SESSION ['uid'] e ha funzionato come previsto. Non so perché le due maiuscole fanno la differenza. L'ho provato anche con userId e andava bene. Qualche idea sul motivo per cui non accetterebbe userID? con due maiuscole, sono confuso con lo – phpNutt

0

userID non ha alcuno stato parola chiave.

Unica ragione per me, è $ _SESSION ['userID'] viene sovrascritto o eliminato da qualche parte.

Assicurarsi di utilizzare session-> start() in tutti i file che si desidera aggiungere/accedere alla sessione.

Una cosa importante (che potrebbe non essere applicabile nel tuo caso) è, se la sessione viene gestita tramite cookie, i cookie possono essere resi accessibili solo in determinate directory e sottodirectory in base a tale. In ogni caso, la sottodirectory avrà accesso alla sessione.

-2

Provare a dare session_name() prima di session_start().

E passare error_reporting(15) per visualizzare gli errori.

4

@ Matt (non in grado di commentare ancora ...): se:
a) Essa appare nella sessione prima di reindirizzamento
b) altri tasti funzionano

80% delle volte il problema è register_globals e l'uso di una variabile ugualmente denominata $ userID da qualche parte (l'altro 19% è solo sovrascrittura in luoghi che non ci si aspetta, l'1% non è in grado di scrivere/bloccare la sessione prima di reindirizzare e dati obsoleti, nel qual caso si può provare session_write_close() prima del reindirizzamento). Va da sé register_globals dovrebbe essere off: P

+0

3 anni dopo. session_write_close è stato il miglior commento per oggi! –

0

assicurarsi che entrambe le pagine sono la stessa versione di PHP (PHP5, PHP4 a volte hanno diversi percorsi di sessione)

0

Non ho sentito parlare di questo problema, ma io porto ho usato sessioni così tanto.

con le sessioni che si deve fare alcune cose e hanno un paio di impostazione impostazione:

  • attivare i cookie sul lato client
  • session_start(), prima che accada qualcosa
  • assicurarsi di don' t distruggere la sessione (a meno che non vogliano effettuare il logout)
  • L'ID di sessione PHP deve essere lo stesso (relativo ai cookie)

Un altro problema potrebbe essere $ user-> id sta restituendo un riferimento a un oggetto che non esiste nella pagina successiva. Molto probabilmente no, ma assicurati.

Se ho visto il tuo codice, potrei aiutarti molto di più. Ma quando esegui il debug controlla la chiave di sessione con session_id() e assicurati che sia lo stesso. Se potessi provarlo, dimmi che potrei continuare ad aiutare.

Anch'io vorrei sapere come andrà a finire quando torno alle sedute.

10

So che questo è un vecchio toppic ma ho trovato la soluzione (per me). Ho messo un'uscita dopo l'intestazione.

$_SESSION['session'] = 'this is a session'; 
header('location: apage.php'); 
exit; 

questo funziona per me

+0

Grazie! Questo funziona per me :) – mattpark22

+0

Questo ha funzionato anche per me. – jenovachild

+0

Funziona solo per la stessa directory. Come fare questo lavoro per la sottodirectory? F.e .: da http: /domain.com a http: /domain.com/subdir/? – arrowman

0

Ho avuto lo stesso problema da poco. Sto scrivendo un sito Web MVC personalizzato per la scuola e, come detto da tutti, start_session() deve essere scritto nelle primissime righe di codice.

Il mio problema era LA POSIZIONE di "session_start()". Deve essere la prima riga del tuo controller globale, non le prime linee della vista. $ _SESSION non era accessibile nei file del controllore perché è stato avviato solo quando il server esegue il rendering della vista.

Quindi, sto usando session_write_close() dopo l'intestazione ('location: xxx.php') chiamata per mantenere le variabili di sessione per la richiesta successiva.

es:

globalController.php:

//First line 
session_start(); 
require_once('Model/Database.php'); 
require_once('Model/Shop/Client.php'); 
... 

logonController.php:

... 
//Users is validated and redirected. 
$_SESSION['client'] = $client; 
header('location: index.php'); 
session_write_close(); 

Speranza ha risolto i vostri problemi.

0

Questo è stato fastidioso da morire ma alla fine ho trovato una soluzione.

config.php ho avuto: include 'session.php';

Nella parte superiore di session.php, avevo: session_start();

Spostando session_start() per la parte superiore del file config.php, viola ...

Problema risolto!

+0

È abbastanza buono che tu abbia risolto il problema. Ti consiglierò di essere un po 'più pulito nella tua soluzione in modo che possa aiutare anche altri lettori. – sachinjain024

1

È consigliabile avviare la sessione prima di utilizzare l'array di sessione.

PHP Codice,
session_start();
$ _SESSION ['userID'] = $ user-> id;

intestazione ('Posizione: /subdirectory/index.php');

Problemi correlati