Newsgroup: it.comp.www.php
Titolo: Problema di sessioni con AJAX

Salve a tutti,
su una pagina uno.php ho due variabili in sessione create col PHP del
tipo $_SESSION['id_user'] e $_SESSION['id_language'], già impostate
che uso nella pagina.
In quella pagina clicco su un pulsante per fare una richiesta AJAX
grazie a Scriptacolous / Prototype che sto usando.
Richiamo un file due.php dove faccio session_start() per richiamare le
mie variabili in sessione.
Ma queste sono presenti, solo che hanno sempre lo stesso valore,
invece dovrebbero essere diverse.
Ovvero, riferendosi all'esempio che ho fatto l'id dell'utente cambia a
seconda dell'utente che usa il sito e l'id della lingua a seconda di
lingua si è scelto di usare...
Quindi, sono impostate, ma mentre nella pagina uno.php cambiano
regolarmente, nella pagina due.php hanno sempre lo stesso valore.
Se allora credo dei doppioni delle variabili nella pagina uno.php,
cioè faccio
$_SESSION['id_userBIS'] = $_SESSION['id_user']
e
$_SESSION['id_languageBIS'] = $_SESSION['id_language']
Mi risulta che le variabili BIS, che nella pagina uno.php sono
impostate, ma non più toccate, nella pagina due.php cambiano
regolarmente.
Scusate, ma è la prima volta che sto usando AJAX, Prototype,
Scriptacoluous e forse non ho capito qualcosa di fondamentale ed
elementare in quel poco che ho letto...
Qualcuno può illuminarmi in proposito per favore?
Grazie in anticipo a chi sarà così gentile.

 regolarmente, nella pagina due.php hanno sempre lo stesso valore.
Ho fatto una semplice prova ed a me funziona come ci si aspetta:
<?php 
session_start();
$_SESSION['test'] = isset($_SESSION['test']) ? $_SESSION['test']+1 : 0;
print($_SESSION['test']);
if (!isset($_GET['ajax'])) {
?>
<script type="text/javascript">
<!--
var http_request = false;
function alertContents() {
  if (http_request.readyState == 4) {
	 if (http_request.status == 200) {
		alert(http_request.responseText);
	 }
  }
}
function makeRequest(url) {
  http_request = false;
  if (window.XMLHttpRequest) { // Mozilla, Safari,...
	 http_request = new XMLHttpRequest();
	 if (http_request.overrideMimeType) {
		http_request.overrideMimeType('text/xml');
	 }
  } else if (window.ActiveXObject) { // IE
	 try {
		http_request = new ActiveXObject("Msxml2.XMLHTTP");
	 } catch (e) {
		try {
		   http_request = new ActiveXObject("Microsoft.XMLHTTP");
		} catch (e) {}
	 }
  }
  if (!http_request) {
	 alert('Cannot create XMLHTTP instance');
	 return false;
  }
  http_request.open('GET', url, false);
  http_request.send(null);
  alert(http_request.responseText);
}
-->
</script>
<a href="javascript:makeRequest('
http://localhost
<?php
echo($_SERVER['PHP_SELF']); ?>?ajax=1')">ajax</a>
<?php } ?>
Se hai problemi a propagare la sessione puoi accodare il SID alla
querystring utilizzata in Ajax.
-- 
Vuoi distribuire il tuo sito web su CD/DVD?
Prova 
http://www.dwebpro.com/
Vuoi diventare un esperto analista PHP/MySQL?
Vieni a fare uno stage con noi: 
http://www.creativepark.it/stage/

Io uso Scriptacolous il che include Prototype quindi uso le sue
funzioni non le scrivo per così dire "a mano" come nel tuo esempio.
Credo che centri a suo modo qualcosa in quanto in effetti credo di
essermi scordato di dirvi un particolare importante.
Se nel file uno.php includo solo il file prototype.js allora non
riscontro il problema.
Se includo oltre a prototype.js anche scriptacolous.js allora si
verifica il problema.
Inoltre, non so se sbaglio, ma nel tuo esempio tu stai usando un unico
file usando $_SERVER['PHP_SELF'].
Io sto su una pagina e nel mentre clicco un pulsante e faccio
comparire un div xhtml preso facendo una richiesta AJAX tramite
classica funzione Prototype a un altro file dove risiede il div che
viene compilato tramite PHP con tanto di sessioni e richieste al
database.
Grazie molte per la risposta!