Newsgroup: it.comp.www.php
Titolo: Rigenerare il session id con una richiesta ajax

Salve a tutti
Mi chiedevo se fosse possibile utilizzare una richiesta Ajax usando
javascript, per richiamare l'esecuzione di uno script php (nello
stesso host dell'applicazione principale) il cui scopo sia quello di
rigenerare l'id di sessione ogni tot secondi, tramite la funzione js
setInterval.
Dai risultati che ho ottenuto sembrerebbe non funzionare e mi chiedevo
il perchè:
--------index.php-------------
session_name("_sn");
session_start();
//output
<script>
/...
//usando JQuery, questa è una semplice richiesta get
function refreshID()
{
  $(document).ready(function() {
      $.get("script.php");
  }
}
setInterval(refreshID(),120);
</script>
-------script.php-------
<?php
session_regenerate_id();
?>
So che questa non è la sede adatta per postare codice js ma posso
dirvi che la richiesta va a buon fine, poichè inserendo altro codice
php che non riguarda la sessione ho potuto constatare che viene
effettivamente eseguito.
Ho provato anche a inserire il codice:   setcookie("Nome","Valore",
999999,"/","localhost"); nel file script.php
ma anche questo sembra non funzionare. a questo punto mi chiedo se
potrebbe essere un problema di directory, anche se i due file php
risiedono nella stessa directory, oppure per ragioni di sicurezza le
sessioni non possono essere modificate da file esterni? Oppure ancora
è questione di thread?

 </script>
Questo codice e` sbagliato.
Innanzitutto nella funzione gli dici che il get deve farlo solo una volta 
che il documento e` caricato, e poi nella setInterval gli dici di 
prendere il risultato della funzione (e non la funzione) e di eseguirlo 
ogni 2 minuti.
Chiedi nel ng javascript. :)
Ma onestamente non ho capito a cosa ti serve rigenerale la sessione ogni 
2 minuti... metti solo in difficolta` l'utente e non guadagni 
praticamente nulla in sicurezza.
Bye.


Grazie, ho visto l'errore javascript.. ignoranza mia in JQuery
Estratto da w3cschool:
"The setInterval() method will continue calling the function until
clearInterval() is called or the window is closed" Da quel che dice
qui, esegue la funzione ogni tot secondi :S chiederò in un ns
javascript.
Onestamente non mi serve a nulla in particolare è solo per fare
qualche esperimento con le sessioni. Ho pensato che rigenerare un id
di sessione ogni 120 millisecondi potesse allontanare predction e
brute force (anche se non so se questo tipo di attacco è molto
usato) . Resta il fatto che il session id non viene rigenerato nemmeno
una volta e fondamentalmente è questo il motivo per cui ho scritto
qui.
Una curiosità, perchè dovrei confondere l'utente? tutto quello che
faccio qui è rigenerare un session id, al massimo gli cambio il valore
di un cookie, l'utente medio non se ne accorgerebbe nemmeno. L'unica
cosa di cui potrebbe accorgersi è la continua richiesta che viene
lanciata ogni tot secondi.

 javascript.
setInterval(pippo(), 12000);   !=    setInterval(pippo, 12000);
Qual � la differenza? Come detto prima da Alessandro, il primo esegue il 
*risultato* di pippo() ogni 12000, mentre il secondo esegue pippo() ogni 
12000.
Enrico

 Enrico
@Enrico
nel codice che ho riportato qui ho omesso gli apici " attorno alla
fnzione che il set interval continua a richiamare, resta il fatto che
io ho fatto una domanda su php e tutti mi rispondono su questioni
legate a javascript che alla fine non mi interessano + di tanto :S
***Resta il fatto che il session id non viene rigenerato nemmeno
una volta e fondamentalmente è questo il motivo per cui ho scritto
qui. ****
Per completezza:
setInterval("funzione()",secondi);
che funziona analogamente a
setInterval(funzione,secondi);
Sono sicuro che, per come ho scritto io la funzione js, il setInterval
ripete correttamente la funzione
--------------------index.php----------------------------
setInterval("refreshaID()", 1000);
function refreshaID()
{
    $(document).ready(function() {
          $("#output").append("<p>SESSION ID: <?php echo session_id
(); ?></p>");
    });
    $.get("sessionRefresh.php");
}
------------------sessionRefresh.php-----------------
<?php
  session_start();
  session_regenerate_id();
  $fh = fopen("FILE.txt","a");
  fwrite($fh,"CIAO\n");
  fclose($fh);
?>
Ho inserito quelle 3 righe in fondo al file per controllare che il
file venga effettivamente eseguito -.- ed il risultato è positivo.
Ora la mia domanda è:    Esiste una qualche restrizione alla
rigenerazione dell'id di sessione in php??

 }
Come ti � stato gi� detto, stai impostando una funzione per l'esecuzione 
quando la pagina � "pronta", mentre invece dovresti chiamare la funzione 
direttamente.
function refreshaID() {
	$.get("sessionRefresh.php");
}
Enrico

 Enrico
Scusate ma vedo che nessuno capisce che *il javascript non è il mio
problema*  oppure nessuno legge le mie risposte...... quindi direi di
chiudere qui chiederò altrove, *****Grazie a tutti per
l'attenzione*****
@Enrico
avevo già rimosso il problema in quanto come puoi vedere sopra la
chiamata $.get era fuori dal document.ready e l'avevo scritto nel 2
post :/ e riscritto corrretto el mio 3 post.