Newsgroup: it.comp.www.php
Titolo: Sessioni:come funzionano 'veramente'?

Salve,
il titolo della mail č abbastanza chiaro e spero lo sia 
anche il contenuto (mi son dovuto quindi allungare un po',
spero che chi non gradisce non s'incazzi troppo)
Problema:
non voglio, anzi non devo!!, usare i cookie e con le 
sessioni ho delle zone d'ombra ( e visto che devo dare un 
esame in cui il php č solo uno dei 7 argomenti non mi 
sembra il caso di spendere 50 euro x un libro).
Lavoro con PHP v4.2.3 montato come modulo di Apache 1.3.23
e avrei bisogno di chiarimenti su quanto segue:
quando un browser si connette ad un sito, il server php 
genera un identificatore di sessione (SID):l'idea č quella
di aprire sul server un file col nome di tale SID contenente
la traccia delle attivitŕ dell'utente,lasciando al browser
solamente il nome di questo file.
Questo nome dovrebbe costituire l'identificatore di sessione.
Ma come fa il server a passarlo al client affinche questi lo
possa poi ripresentare al server perchč quest'ultimo capisca 
che si tratta di una request fatta all'interno della stessa
sessione?   (La frase č un po' contorta, lo so')
Esistono opportuni header HTTP?
Se il browser ha i cookies disabilitati, nella documentazione 
a mia disposizione si suggeriscono a questo punto 2 vie:
1 ALTERNATIVA:
  questa alternativa, pronosticata come la piů probabile,
  e la piů rognosa, č quella che prevede di prelevare il SID 
  e di passarlo in ogni link o form contenuti nel sito, 
  attraverso l'uso della funzion session_id().
  Esempio:
  //index.php
  session_start();
  $SID=session_id();
  ..........
  <a href="pag1.php?<?=SID?>">Pag1.php</A> 
  //dubito un po' x la sintassi di quel<?=SID?>
 
  Vorrei capire cosa accade realmente in questo scenario e
  ciň che immagino accada č:
  a)il browser fa la prima richiesta (index.php)==>il server,
    dato che si tratta della prima request di una nuova 
    sessione genera il SID e risponde fornendolo al client.
    Come? 
  b)suppongo che il server glielo fornisca costruendo le 
    pagine in modo che ogni link incorpori il SID generato per
    quella sessione, proprio come nel precedente esempio (i 
    link direi che vengono "adattati" a ciascuna sessione)
 
  c)il server invia le pag. richieste (e costruite in tal modo)
  d)l'utente clicca i link presenti,costruiti per lui "ad hoc",
    e in virtů di ciň il server riconosce l'utente e carica 
    le relative var. di sessione memorizzate in $_SESSION
  E' corretto?
  Se cosě fosse, il browser non deve memorizzare il SID, ma in
  pratica viene "costretto" ad usarlo per come sono costruiti
  i link delle pagine che il server gli invia, giusto?
2 ALTERNATIVA:
  usare "PHP compilato con l'opz. --enable-trans-sid"
 
  Ma precisamente che vuol dire?Che il programma eseguibile
  del PHP deve esser stato costruito compilando il sorgente
  con tale opzione?
  Se cosě fosse e se la versione su cui lavoro (4.2.3) non
  fosse stata cosě costruita come faccio ad accorgermene?
 
  Comunque, tale opzione di compilazione "permette la
  diffusione AUTOMATICA del SID".Devo dunque pensare che lo
  scambio di SID client<-->server avvenga in maniera  
  trasparente.
  Come? Tramite gli header sopra ipotizzati?
  In questo scenario il client(=browser) deve memorizzare 
  da qualche parte il SID, giusto?E se si, dove?
In un progettino di prova che ho fatto per capire 
'ste benedette sessioni, le mie pagine .php non "costruiscono"
il link come nella alternativa 1, ma forniscono piuttosto dei
link "semplici"; esempio:
<A HREF="
http://localhost/Esercitazione_4/ProvaSessione/
">
Clicca qui per tornare alla pagina iniziale </A>
Tutto sembra funzionare (le variabili di sessione messe
in $_SESSION si mantengono da una pagina all'altra, cioč 
esistono per tutta la sessione finchč non chiudo il browser)
Devo pensare che il PHP che utilizzo sia stato compilato con
l'opz. --enable-trans-sid?
Infine, il mio php.ini contiene
; trans sid support is disabled by default.
; Use of trans sid may risk your users security. 
; Use this option with caution.
; - User may send URL contains active session ID
;   to other person via. email/irc/etc.
; - URL that contains active session ID may be stored
;   in publically accessible computer.
; - User may access your site with the same session ID
;   always using URL stored in browser's history or bookmarks.
session.use_trans_sid = 0
e il mio progetto di prova lavora correttamente anche con 
session.use_trans_sid = 1.
Ma precisamente a che serve "session.use_trans_sid"?
Mi sembrerebbe ad abilitare/disabilitare la diffusione
automatica del SID ma alla prova dei fatti non si direbbe
(altrimenti, dato che non modifico le URL aggiungendo
?<?SID?> come nell'alternativa 1, dovrei avere dei problemi)
Ringrazio veramente chi ha voglia di darmi una mano, ciao
                                  Chef

l'opz. --enable-trans-sid?
No, stai usando i cookie.
C'e' un terzo modo che sfrutta l'autenticazione Digest; ma a quanto
so, sono l'unico demente che ci si sia provato.
Leonardo
-- 
Avere studiato senza mettere in pratica e' inutile;
mettere in pratica senza avere studiato e' pericoloso.
                                                - Conphpucio

 so, sono l'unico demente che ci si sia provato.
Direi geniale ma... ma non ti basta la Basic? Hai per forza bisogno della
Digest?
Con la Basic Authentication ti risolvi:
1) L'utonto che passa l'URL del suo conto online ad un amico e l'amico gli
prosciuga il conto
2) Il rompi che non vuole usare i cookie
3) Eviti di dover fare propagazione 
Con la Digest Auth cosa hai in piu?
(Ok, ok, mo' cerco...)
...
...
(Ahem, sono sempre qui, pigro e gongolante in attesa di risposta :-O)
e-nrico


:Provate a guardare gli ingredienti del famoso Labello che si usa per
:le labbra screpolate: Butirrospermum Parkii (sperma di maiale).

 a quel punto, usavo l'"autenticazione" solo per la sessione).
Ecco, questo e' uno dei punti dolenti: come fai a convincere lo user agent
ad impostare un certo AuthUser con una certa AuthPw? Puoi? E' possibile?
Ok cerco...
enrico




Pare di no. Non ci sono riuscito, e sa Dio che non mi fermo davanti alle
soluzioni sporche.
Probabilmente si puo' fare in VBScript o altro antani simile.
Appena vede un @ nell'URL, Explorer stianta.
