2010-05-18 12 views
5

Accesso a un sito Sto lavorando alle funzioni come previsto sul mio computer locale ma non sul server remoto ma SOLO su Internet Explorer. Il kicker è che funziona in IE localmente, ma non sulla macchina remota.Le variabili di sessione non vengono impostate ma solo in Internet Explorer e non su tutte le macchine

Cosa diavolo potrebbe causare questo? Ho passato il codice sulla macchina remota e posso vedere i valori di accesso immessi verificati nel database, vengono trovati e quindi viene chiamata una funzione di accesso. Imposta due variabili $ _SESSION e reindirizza alla pagina principale dell'amministratore. Tuttavia, solo in IE (e non quando viene eseguito su un computer locale ... questa è la chiave) le variabili $ _SESSION non sono presenti quando arrivi alla pagina principale dell'amministratore. var_dump($_SESSION) mi dà quello che mi aspetto su ogni browser quando sto eseguendo questo nel mio ambiente locale e in ogni browser tranne IE 6, 7 e 8 quando viene eseguito sul server remoto (dove ottengo un valore nullo come se nulla fosse stato impostato per $ _SESSIONE).

Questo mi ha davvero bloccato per cui ogni consiglio è apprezzato.

Per un esempio ... in IE, eseguito a livello locale, var_dump mi dà:

array 
'Username' => string 'theusername' length=11 
'UserID' => string 'somevalue' length=9 

Esegui sul server remoto (cioè solo ... funziona bene in altri browser) var_dump mi dà:

array(0){} 

codice (un esempio minimo ... anche se in realtà un esempio di codice non è necessaria con questo problema):

$User = GetUser($Username, $Password); 
    if ($User->UserID <> "") { // this works so we call Login()... 
     Login($User); // this also works and gives expected results. on to redirect... 
     header("Location: index.php"); // a var_dump at index.php shows that there is no session data at all in IE, remotely. 
    } else { 
     header("Location: login.php"); 
    } 


function Login($data) { 
     $_SESSION['Username'] = $data->Username; 
     $_SESSION['UserID'] = $data->UserID; 
// a var dump here gives the expected data in every browser 
    } 

EDIT: Risolto questo. Era il fatto che il nome del dominio sul server di test aveva un trattino basso. Non ho idea del perché e non ho tempo per Google in questo momento, ma il trattino basso, chiamato qualcosa come some_client.ourcompany.com, era il problema. Devo amare Internet Explorer ... è come un collaboratore passivo e aggressivo che semplicemente non puoi evitare.

+0

Esempio di codice da esaminare? –

+0

Hai incluso 'session_start();' in cima a ciascuna pagina? – Alec

+0

Hai inserito session_start(); in cima ad ogni pagina? Sì. – Stuart

risposta

2

Inserire questo in risposta (suggerito dall'utente tuzo) per renderlo più facile da trovare. Risolto questo. Era il fatto che il nome del dominio sul server di test aveva un trattino basso.Non ho idea del perché e non ho tempo per Google in questo momento, ma il trattino basso, chiamato qualcosa come some_client.ourcompany.com, era il problema. Devo amare Internet Explorer ... è come un collaboratore passivo e aggressivo che semplicemente non puoi evitare.

Tratto da un'altra risposta SO ... spiega esattamente cosa sta succedendo: Uno dei sottodomini utilizza un carattere di sottolineatura? IE ha problemi ad accettare i cookie da sottodominio che non seguono l'URI RFC. (http://www.ietf.org/rfc/rfc2396.txt)

0

Prova a mettere session_start(); . Nella parte superiore della pagina che si stanno facendo le sessioni in e verificare se si assegna la sessione vars la strada giusta:

$_SESSION['SESSION_NAME'] = 'sessionValue'; 
+1

Che cosa non va nel modo OP? Inoltre, se funziona in ogni browser ma IE (s), ovviamente include 'session_start()' in ogni pagina ... –

1

controllare il valore della session.cookie_domain nel file php.ini. Se questo valore è impostato, assicurati che sia quello che ti aspetti. Questa è la cosa più grande che posso pensare a quale potrebbe comportarsi diversamente localmente rispetto a remoto.

Inoltre, se si ha un valore impostato su session.cookie_lifetime, provare a commentare l'intestazione nel proprio php.ini. Ho visto un comportamento strano con IE quando ho lasciato cadere un valore.

Ecco un correttore di sessione di sveltina. Se ricarichi la pagina e continui a vedere nuovi valori per il token, non otterrai una sessione persistente. Quindi puoi sicuramente dare la colpa al server/configurazione di PHP e non al tuo codice.

<?php 
session_start(); 
if (!isset($_SESSION['token'])) { 
    $_SESSION['token'] = sha1(uniqid(rand(), true)); 
} 

if (!empty($_POST)) { 
    $_SESSION['hi'] = preg_replace('/[^\w ]+/','',$_POST['hi']); 
    header("Location: index.php"); 
    exit; 
} 

?> 
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
<html> 
<head> 
<title>Session test</title> 
</head> 
<body> 

<h1>How's that session doing?</h1> 
<p>Message: <?=htmlspecialchars($_SESSION['hi'])?></p> 
<p>Token: <?=htmlspecialchars($_SESSION['token'])?></p> 


<form action="index.php" method="post"> 
<fieldset> 
    <label for="hi">What do you have to say?</label> 
    <input type="text" name="hi" id="hi"> 
    <input type="submit" value="Submit"> 
</fieldset> 
</form> 

</body> 
</html> 
1

"E 'stato il fatto che il nome di dominio sul server di prova ha avuto un carattere di sottolineatura in esso" Questo è assolutamente vero. Questo post è stato trovato dopo aver trascorso più di 3 ore per risolvere lo stesso problema. Mille grazie a gaoshan88

0

Abbiamo avuto lo stesso problema, tuttavia non erano i caratteri del nome del server ma l'ora del server che non era corretta. Ciò ha causato l'invalidità istantanea dei cookie di sessione in IE mentre funzionava su altri browser.

Problemi correlati