Newsgroup: it.comp.lang.javascript
Titolo: Estrarre alcune informazioni dall'url.

Ciao a tutti,
ho la necessità di estrarre da una URL del tipo: 
http://www.miosito.it/dir1/dir2/dir3/miapagina.php
 le seguenti informazioni:
a) il nome a dominio, in questo caso:   
MIOSITO.IT
b) la pagina associata, in questo caso:   MIAPAGINA.PHP
come dovrei procedere?
Per completezza queste due informazioni le devo poi elaborare lato server 
(php), come dovrei quindi passarle?
Grazie in anticipo per la risposta, e mi scuso fin da adesso se nell'ultima 
parte possa essere ritenuto ot.
Cooper. 

document.location


non va :( quando richiamo la pagina tramite iframe, mi restituisce i dati 
della pagina contenuta all'interno dell'iframe e non quella che contiene 
l'iframe :(
cooper. 

ah beh certo, se hai un iframe non funzia. :( non hai modo di fare a
meno del frame per la tua pagina? oramai gli iframe sono deprecati dai
più moderni standard....

ah, per il dominio, document.domain non funziona neanche?

 l'iframe :(
http://developer.mozilla.org/en/docs/DOM:window.parent
'bye

 ha scritto nel messaggio 
news:1151235433.7...@i40g2000cwc.googlegroups.com...
ah beh certo, se hai un iframe non funzia. :( non hai modo di fare a
meno del frame per la tua pagina? oramai gli iframe sono deprecati dai
più moderni standard....
----
se c'è alternativa migliore agli iframe ben venga, nessun problema userò 
quella alternativa. Tieni presente che ho una pagina PHP caricata in 
www.miosito.it
 di nome A.PHP.
Un altro utente su 
www.tuosito.it
 ha la pagina B.PHP attraverso la quale, 
accede alla pagina A.PHP contenuta in 
www.miosito.it
  e la pagina A.PHP deve 
rilevare i dati della pagina B.PHP ovvero dalla pagina he l'ha richiamato e 
contenuti quindi in 
www.tuosito.it
In questo caso in A.PHP io dovrei ottenere:
pagina: B.PHP
dominio:   
TUOSITO.IT
Non so se mi sono spiegato meglio adesso.
Grazie ancora,
Cooper.

 ha scritto nel 
messaggio news:1urrs05elfie.1w...@40tude.net...

Ho dato una lettura al link, ma mi sorgono dei dubbi, non essendo standard, 
fino a che punto funziona? Su firefox mi sembra non debbano esserci problemi 
(essendo come si evince dal url, di provenienza mozilla) ma su internet 
explorer?
In ogni caso,  per ottenere l'informazione richiesta direttamente lato 
server come dovrei procedere?
Ovvero, in che modo devo combinare e far interagire l'oggetto location con 
questo lato server per ottenere rispettivamente il dominio e la pagina web?
Per completezza ricordo che l'url in questione contiene la pagina A.PHP che 
richiama tramite l'iframe la pagina B.PHP e che in B.PHP dovrò memorizzare i 
dati della associati alla pagina A.PHP.
Sarei grato se potessi avere uno schizzo di codice per capire meglio come 
muovermi, non ho le idee molto chiare in circostanze del genere.
Grazie in anticipo,
Cooper. 

 In questo caso in A.PHP io dovrei ottenere:
Devi controllare il referrer. In JS purtroppo non so come si possa fare.
In PHP usi $_SERVER["HTTP_REFERER"]
Tieni conto che non sempre e` attendibile (puo` essere modificato o
azzerato dal client e da qualsiasi proxy in mezzo).
Bye.
-- 
Alessandro Pellizzari

 muovermi, non ho le idee molto chiare in circostanze del genere.
Pagina con iframe:
<html>
<head>
<body>
L'iframe:
<hr/>
<iframe src="parentwithframe1.html"></iframe>
<hr/>
Foo!
</body>
</html>
Pagina nell'iframe
<html>
<head>
<script type="text/javascript">
function sp(){
 alert("URL: "+parent.location.href);
}
</script>
</head>
<body>
<a href="#" onclick="sp();return false;">Show parent URL</a>
</body>
</html>
Al posto di parent puoi anche usare top.location.href nel caso ci siano
piu' (i)frames annidati.
'bye


Su Firefox mi pare di ricordare alcune extension, di cui una nello
specifico, proprio per la gestione del referer.
Insomma, come giustamente dici non è sempre attendibile. Personalmente lo
utilizzo a volte, ma solo in ambienti controllati (intranet) e se non ho
alternative ugualmente semplici ed efficaci.
-- 
~ "When you have eliminated the impossible, whatever remains,
however improbable, must be the truth." (S.H.)

 dati della associati alla pagina A.PHP.
Se non sei in un ambiente controllato e quindi preferisci non "fidarti" di
ciò che può o non può esserci in HTTP_REFERER, puoi sempre da A.PHP caricare
la pagina nell'iframe B.PHP passando via GET l'URL di "A.PHP" opportunamente
decodificato.
Puoi fare quest'operazione sia completamente da PHP (basandoti sulle
variabili server) o da JS (usando gli oggetti window/location).


 dati della associati alla pagina A.PHP.
A livello server, i due script sono tuoi o solo B lo e'?
Nel primo caso puoi benissimo passare dei parametri da A a B quando imposti
il src dell'iframe o potresti anche evitare l'iframe :-)
Nel caso in cui tu non possa farlo, come ti hanno gia' detto, non puoi fare
molto, purtroppo il referer non sempre e' valorizzato visto che browser,
estensioni, firewall, proxy e altri programmi potrebbero metterci mano.
Inoltre il referer non e' valorizzato solo quando includi una pagina in un
iframe, puo' essere un normale link (anche se "deep link").
Se vuoi solo un controllo parziale su chi inserisce B in un (i)frame credo
che l'unico modo sia con javascript. Per evitare che succeda puoi sempre
usare javascript o cercare di evitare ogni deep link tramite sessioni lato
server.
'bye


La domanda posta cosi mi spiazza un po', provo a spiegare meglio la 
situazione, io ho una pagina php chiamata B.PHP che contiene uno script; 
questa pagina viene inglobata all'interno di un iframe, avendo qualcosa del 
tipo:
(1) <iframe src="B.PHP" etc etc></iframe>
La (1) può essere inserita in una qualsiasi pagina web di terze parti (che 
ho chiamato A.PHP per semplicita).
Quindi in A.PHP avremo qualcosa del tipo:
A.PHP
<html>
  <body>
    <iframe src="B.PHP" etc etc></iframe>
  </body>
</html>
Ora A.PHP come detto sopra è una pagina appartenente a terzi che hanno 
deciso di inserire  la riga (1) nella propria pagina.
Il mio obiettivo a questo punto è, da B.PHP conoscere la provenienza della 
pagina che richiama B.PHP, ovvero A.PHP.
Conoscere la provenienza intendo rilevando dalla url di provenienza il 
dominio e la relativa pagina (in questo caso: A.PHP) ma può assumere un 
qualsiasi altro nome.
Nella sostanza io posso solo lavorare su B.PHP e sul tag <iframe></iframe> 
non su altro.
Mi sembra strano che non si possa fare molto :( Neanche mettendo qualche 
codice all'interno del tag iframe? non so qualche strategia particolare?
Se può essere d'aiuto, l'obiettivo che intendo raggiungere è 
attivare/disattivare lo script contenuto in B.PHP in base al sito internet 
di provenienza. Come  codici identificativi uso il nome a dominio e la 
pagina web che sono memorizzati su un database.
Ne consegue che se dominio e pagina web di provenienza risultano inseriti 
nel database, lo script contenuto in B.PHP si attiva nel sito internet di 
provenienza altrimenti no.
Ecco è questo il fine che intendo raggiungere, magari la strada percorsa da 
me risulta meno praticabile e a questa soluzione si può pervenire in maniera 
sensibilmente diversa boh, confido in voi.
Grazie in anticipo.
Cooper.

 provenienza altrimenti no.
Molto dipende da quanto ti senti paranoico :-)
Se ti fidi nel codice dell'iframe possono mettere:
... src="B.php?domain=foo.bar&amp;pag=foobar.html"
Ovviamente un sito non autorizzato potrebbe fare lo stesso dopo aver visto
il codice della pagina di uno che invece e' autorizzato :-)
Se sei piu' paranoico puoi usare qualcosa del genere:
Dato che non mi metto a fare controlli su DB, diciamo che la tua pagina A
autorizzata sia 
http://localhost/my/tests/auth00.html
 con:
<html>
<head>
<body>
L'iframe:
<hr/>
<iframe src="auth00.php"></iframe>
<hr/>
Foo!
</body>
</html>
Ove il tuo script B e' auth00.php con:
<?
session_start();
$url="";
$contCode="";
$thisScript="auth00.php";
if(isset($_GET["cc"])){
	$contCode=$_GET["cc"];	
}
if(isset($_GET["url"])){
	$url=$_GET["url"];
}
if(!empty($url) && !empty($contCode)){
 if(isAllowed($url, $contCode)){
	initHTML();
	print " </head>
		<body>Visualizza la pagina";
	endHTML();
 } else {
	initHTML();
	print "  </head>
		 <body>Non fare il furbo!<br/>
		 accesso non consentito da: ".htmlentities($url,ENT_QUOTES);
	endHTML();
 }
} else {
	initPage(); 	
}
function initPage(){
 global $thisScript;
 $contCode=md5(microtime()); 
 $_SESSION["contCode"]=$contCode;
 initHTML();
  print "<script type='text/javascript'>
 function reload(){
 
  var page=location.href;
  if(parent){
	page=parent.location.href;
  }
  page=encodeURIComponent(page);
  url='$thisScript?cc=$contCode&url='+page;
  location.href=url;
 }
 reload();
 </script>
 </head>
 <body>
 <noscript>
 Javascript necessario alla visualizzazione 
 </noscript>";
 endHTML();
}
function isAllowed($u, $c){
 if(isset($_SESSION["contCode"]) && $_SESSION["contCode"]==$c){
	return isPageAllowed($u);
 }
 return false;
}
function isPageAllowed($u){
 $urlInfo=parse_url($u);
 if(!$urlInfo){
	return false;
 }
 if(isset($urlInfo['host'])){
	$d=$urlInfo['host'];
 }
 if(isset($urlInfo['path'])){
	$p=$urlInfo['path'];
 }
 // qui fai il tuo controllo
  if($d=="localhost" && $p=="/my/tests/auth00.html"){
	return true;
 } else {
	return false;
 }
}
function initHTML(){
 print "<html><head>";
}
function endHTML(){
 print "</body></html>";
}
?>
'bye

  }
'bye