Newsgroup: it.comp.www.php
Titolo: [Semi-OT] HTTP_REFERER e variabili get

Ho amaramente scoperto una cosa di cui non sospettavo minimamente: uso 
spesso $_SERVER["HTTP_REFERER"] su semplici php, soprattutto per settare 
cookies e poi ritornare alla pagina chiamante, ma per caso sono venuto a 
sapere che a qualcuno non ci tornava affatto, alla pagina chiamante.
Indagando ho scoperto che su alcuni pc (Firefox, stessa versione), la 
variabile suddetta conteneva sì la pagina chiamante, ma senza le 
variabili get impostate... per esempio, se la pagina era 
http://miosito.it/prova.php?pippo=2
, e sul mio pc è questo il contenuto 
della variabile, su altri pc il contenuto è 
http://miosito.it/prova.php
E' forse un problema noto?
-- 
Jax

 E' forse un problema noto?
Boh, č noto che non bisogna fare gran affidamento su
$_SERVER["HTTP_REFERER"] e sta diventando sempre piů noto che FireFox si
sta riempiendo di bachi :( e se va avanti cosě ciao ciao

Ugo ha scritto:

imho a parte delle cazzatine js modificate nelle versioni nn trovo
particolarmente bacato (al 99% dei siti visitati funziona)
ha un bug quello si, prova a leggere un HTML testuale di 1 mb
quindi senza immagini e vedi che palla diventa,
comunque i bug di FF sono sempre inferiori come rischi a quelli di ie
e poi ha lo stesso comportamento anche su linux
un sito FF e' un sito che vedono tutti
no le legge
comunque
non usare reffer perche prende i dati da un link passato
e i cookies non sono affidabili in quanto non accettati
puoi usare su un link la funzione history.go(-1) sempre che
usi header per non fare la cronologia

 particolarmente bacato (al 99% dei siti visitati funziona)
Cerchiamo di non iniziare la solita sterile guerra sui vari browser. Non 
c'è un browser migliore di un altro, ognuno ha la sua opinione (giusta o 
sbagliata che sia) e comunque noi webmaster (lol) non possiamo far altro 
che accettare i difetti e cercare workaround e sperare che funzionino 
nella versione successiva.
In questo caso mi pare di capire che uno che funziona al 100% non ce ne 
sia...
Per quanto riguarda i cookies... proverò a cercare un altra tecnica.
-- 
Jax

 Per quanto riguarda i cookies... proverò a cercare un altra tecnica.
Fatti una coda round-robin lunga a piacere in sessione. :)
Bye.

 Fatti una coda round-robin lunga a piacere in sessione. :)
Se era una battuta, non l'ho capita.
Se era un consiglio, non l'ho capito :)
Ho googlato un po' ma non ho trovato niente di particolare su "php 
session round robin"...
-- 
Jax

 trovato niente di particolare su "php session round robin"...
No, ero serio. :)
Prova a cercare "round robin queue". Non so se ne trovi in PHP, ma 
l'idea e` quella.
In pratica ti fai un array di stringhe ($q) di n elementi e mantieni un 
indice di posizione ($p).
All'inizio di ogni pagina inserisci in $q[$p] la query string completa, 
quindi aumenti $p di 1, facendo attenzione a farlo "girare" quando 
arrivi a n (qualcosa tipo (++$p % $n) )
In questo modo hai un array con le ultime $n pagine visitate 
dall'utente e puoi retrocedere finche` vuoi senza bisogno di REFERER.
Se non poni limite (attento alle dimensioni della sessione, arrivi 
presto a decine di pagine viste) puoi tracciare il percorso 
dell'utente da quando entra a quando se ne va.
Bye.

 dell'utente da quando entra a quando se ne va.
Ottima tecnica! In questo modo si ha una specie di history "privata" 
all'interno del sito.
Oggi se ho tempo faccio qualche prova con PHP. Dovrebbe essere 
abbastanza semplice: pensavo di implementarla mediante push e pop, 
magari ciclati se serve fare "salti" indietro per più di una posizione, 
che dici?
-- 
Jax

 che dici?
Di solito push e pop si usano per gli stack, e hai lo svantaggio che una 
volta che fai il pop elimini l'oggetto dallo stack.
Con una coda round-robin dovresti implementare solo l'enqueue e il seek 
(a ritroso), ma non il dequeue (tanto gli elementi vengono 
sovrascritti quando fai il giro).
Devi solo stare attento a non permettere seek piu` profondi di $n.
Bye.

 Con una coda round-robin dovresti implementare solo l'enqueue e il
Scusami, mi sono accorto che ho scritto "round robin queue" fino ad 
adesso intendendo invece "circular queue" (o circular buffer).
Alla fin fine si comportano allo stesso modo, ma sono diversi :)
Bye.

Alessandro Pellizzari wrote:

un qualcosa del genere potrebbe andare anche se non e' una RR..
non testato..
class Sq
{
 protected $q, $l;
 public function __construct ($l = 8)
 {
  $this->q = array();
  $this->l = $l;
 }
 public function put ($i)
 {
  if (count($this->q) >= $this->l)
   array_pop($this->q);
  $this->q = array_merge(array($i), $this->q);
 }
 public function get ($p = 0)
 {
  return isset($this->q[$p]) ? $this->q[$p] : NULL;
 }
}
-- 
www.iuz-lab.info
 - 
www.php-faq.org