2012-12-05 11 views
6

Ho una directory principale denominata System con una sottodirectory denominata Subsystem. La mia sessione dalla directory principale non funziona nella sottodirectory.Una sessione PHP funziona su sottodirectory?

Quando I echo session_save_path(); in entrambe le cartelle, mi mostrano "/tmp".

Quindi, ho provato a inserire session_save_path("../tmp"); nella mia sottodirectory ma mi mostra "This webpage has a redirect loop".

session.php in System directory:

<?php 
session_start(); 

if (!($_SESSION['uid'])) 
{ 
    header("Location:index.php"); 
} 
else 
{ 
    $_SESSION['uid'] = $_SESSION['uid']; 
} 
?> 

session.php nella cartella sub-sistema:

<?php 
session_save_path("../tmp"); 
session_start(); 

if (!($_SESSION['uid'])) 
{ 
    header("Location:index.php"); 
} 
else 
{ 
    $_SESSION['uid'] = $_SESSION['uid']; 
} 

>

Ho Googled tutto, ma ancora non riesco a farlo? lavorare.

+0

@TheSmose, sì, commentato sotto la risposta;) – Newbie

risposta

1

La directory non influisce sullo stato della sessione (tutte le directory di un determinato sito Web Apache-PHP accedono alla stessa sessione in una configurazione standard). Non dovresti usare session_save_path().

Penso che il problema in parte sia che si sta impostando 'uid' su se stesso ($_SESSION['uid'] = $_SESSION['uid'];) - quindi potenzialmente mai in realtà lo si imposta su un valore - e potenzialmente reindirizzando indefinitamente se non è impostato.

vi suggerisco questo semplice test per garantire che le sessioni sono, infatti, lavorando:

/session_set.php

<?php 
    session_start(); 
    $_SESSION['uid'] = 123; 

/sub_dir/session_get.php

<?php 
    session_start(); 
    echo $_SESSION['uid']; 
+0

questo test funziona, la sottocartella può ottenere la sessione dalla cartella principale. La mia sessione viene creata in login.php dopo che l'utente ha effettuato l'accesso. Così, passo la sessione attraverso session.php nella cartella principale. ma la mia sottocartella non ottiene ancora la sessione :( – Newbie

+0

A proposito, ($ _SESSION ['uid'] = $ _SESSION ['uid'];) funziona bene solo tra le pagine nella directory principale. – Newbie

+0

@Newbie - Funzionerà bene ovunque, ma non sta facendo nulla. I problemi che stai avendo non sono dovuti alla sessione. C'è un problema da qualche altra parte nella tua logica. Ti suggerisco di creare una nuova domanda postando tutta la tua logica di sessione e lasciare che qualcuno capisca dove si trova il bug. –

0

Una sessione crea un file in una directory temporanea sul server in cui è stata registrata la sessione vari abilità e i loro valori sono memorizzati. Questi dati saranno disponibili per tutte le pagine del sito durante tale visita.

La posizione del file temporaneo è determinata da un'impostazione nel file php.ini chiamato session.save_path. così piace controllare questo percorso.

Inoltre [session-save-path()] [1] Ottieni e/o imposta il percorso di salvataggio della sessione corrente.

Penso che non è necessario scrivere questa riga e controllare php.ini per il percorso corretto.

per la sessione ho trovato qualche articolo utile http://www.tutorialspoint.com/php/php_sessions.htm

Grazie.

+0

in php.ini (nella cartella public/html), ho trovato session.save_path = "/ tmp". allora wat dovrei fare? Mi chiedo se c'è qualcosa di sbagliato in seeion_save_path o no. – Newbie