2013-11-28 15 views
6

un server interno serve due applicazioni diverse per utenti tramite la nostra LAN:PHP non memorizzare i dati in sessioni per alcuni utenti

https://10.0.0.100/app1/ 
https://10.0.0.100/app2/ 

Entrambe le applicazioni sono serviti dallo stesso file di configurazione di Apache, sono solo in directory separate sotto public_html. Entrambe le applicazioni utilizzano sessioni PHP, ma entrambi prefisso al variabili $_SESSION con i loro spazi dei nomi:

$_SESSION['app1_favorite_colour'] = 'Yellow'; 
$_SESSION['app2_quest'] = 'Agghhh!'; 

Nonostante questo, utenti connessi in app1 non stanno avendo il loro app2_ dati di sessione scritti nel file di sessione sul disco. Considerate page1.php:

<?php 

/** 
* App2 
* /page1.php 
*/ 

session_start(); 
$_SESSION['apps_been_here'] = 'Yes!'; 
echo "<a href='page2.php'>Clicky</a>"; 

?> 

Poi, il page2.php:

<?php 

/** 
* App2 
* /page2.php 
*/ 

session_start(); 
echo "Have you been here: {$_SESSION['apps_been_here']}"; 

Questo fa non stampa "sì" per l'utente se l'utente è connesso a app1, come pure! Tuttavia, gli utenti che non utilizzano app1 fare vedere "sì" su page2.php. Indagando, ho aperto i file di sessione in /var/lib/php/session/. Vedo solo variabili in quel file che iniziano con il prefisso app1_ e nessuno che inizia con app2_per gli utenti che hanno eseguito l'accesso all'app1. Gli altri utenti che non hanno effettuato l'accesso all'app1 do hanno variabili che iniziano con app2_ nei relativi file di sessione!

Ho verificato con lsof che i file non sono bloccati e ho confermato che non ci sono finestre aperte del browser in esecuzione nel browser. app1 pagine nel browser. Perché le variabili di sessione App2 non possono essere archiviate nel file di sessione? C'è abbondanza di spazio libero su disco e memoria e il carico della CPU è inferiore a 0,1 (come misurato da uptime). Il problema si verifica per più utenti in più browser (Firefox, Chrome). Cancellare i cookie e la cache del browser non aiuta.

+0

Cosa hai fatto nel login App1? – PasteBT

risposta

1

Credo che ciò che si sta facendo dovrebbe funzionare ma c'è un modo migliore per farlo che potrebbe risolvere il tuo problema nel tuo caso. Invece di prefisso le chiavi di sessione con 'app1' o 'app2' sufficiente utilizzare la funzione session_name() prima di session_start() come:

session_name('app1'); 
session_start(); 
$_SESSION['been_here'] = 'Yes!'; 
... 

È anche possibile regolare il percorso di cookie di sessione con session_set_cookie_params() in modo da entrambe le applicazioni sarebbero completamente invisibili l'uno all'altro come: session_set_cookie_params (60 * 60 * 24 * 30, '/ app1 /');

Per ulteriori informazioni sulla risoluzione dei problemi, è necessario esaminare ovunque si utilizzino le funzioni session_ * e guardare le opzioni di configurazione session.* nel proprio php.ini.

0

Prova questo

session_start(); 
$_SESSION['apps_been_here'] = 'Yes!'; 
echo "<a href='page2.php'>Clicky</a>"; 
session_write_close(); 

Ho avuto un problema del genere, una volta. Questo lo ha risolto per me!

0

non va bene devono essere nella stessa di sottostruttura è necessario avere

  • root/
    • frontend/
      • sessione.php
      • app1/
      • app2/

session.php conterrà soltanto session_start();

ogni app1 & app2 includerà session.php (require_once ("../ session.php");) questo è l'unico modo che conosco per farli funzionare

Problemi correlati