[PHP, iFrames] Sessions bij include in andere server

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • BratMokstrof
  • Registratie: Mei 2003
  • Laatst online: 14-09 21:43
Ik heb een nogal "leuk" probleem.

Ik ontwikkel een PHP-script, dat geïnclude wordt door een andere site (ander domein), in een iFrame.

Ik wil graag toegang hebben tot het IP-adres van een user die op dat moment de site bezoekt, echter, via de $_SERVER['REMOTE_ADDR'] krijg ik dan het IP van de server waarop mijn file geïnclude wordt.

Voorlopig is dit opgelost door de server-kant de file te includen als
code:
1
include 'http://www.site.nl/page.php?ip=$ip'

(Waarbij het $ip het juiste adres bevat).
Echter, ik kan dan de IP uitlezen, maar op het moment dat er een link wordt geklikt, gaat het mis ...
Ik heb daarom de volgende file gemaakt, die altijd direct geïnclude wordt in al mijn files:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
    session_start();

    if ($_GET["ip"]) {
        $_SESSION["server_ip"] = $_GET["ip"];
    }

    $ip = $_SESSION["server_ip"];

    session_write_close(); 

    echo "IP: $ip";
?>

Maar dit wil dus niet zo. De eerste keer dat het opstart, lees ik die $_GET["ip"] uit en drukt hij keurig die waarde af. Klik ik door, echter ...

Ik heb de sessie verder niet nodig, dus als jullie een alternatief weten voor mij om het IP te achterhalen of hoe deze structuur te fixen ... :)

[ Voor 6% gewijzigd door BratMokstrof op 31-05-2005 11:09 ]


Acties:
  • 0 Henk 'm!

  • T-MOB
  • Registratie: Maart 2001
  • Laatst online: 22:34
Je kunt in plaats van het script includen ook direct het script aanroepen. Stop het bijvoorbeeld in een transparant plaatje wat je de client laat aanroepen. Dan heb je ook geen iframe nodig. Het enige wat je moet doen is zorgen dat het niet gecached wordt.

Regeren is vooruitschuiven


Acties:
  • 0 Henk 'm!

  • BratMokstrof
  • Registratie: Mei 2003
  • Laatst online: 14-09 21:43
T-MOB schreef op dinsdag 31 mei 2005 @ 11:16:
Je kunt in plaats van het script includen ook direct het script aanroepen. Stop het bijvoorbeeld in een transparant plaatje wat je de client laat aanroepen. Dan heb je ook geen iframe nodig. Het enige wat je moet doen is zorgen dat het niet gecached wordt.
Volgens mij volg ik dit niet helemaal ...?

Aan de server-side is sowieso behalve het commando om dit aan te roepen weinig te wijzigen ben ik bang...
Die iFrames zitten zo doorweven in de rest v/h systeem (uitbreiding op uitbreiding, het bekende verhaal), dat het lastig wordt dat te veranderen ...

Acties:
  • 0 Henk 'm!

  • T-MOB
  • Registratie: Maart 2001
  • Laatst online: 22:34
Ok laat ik het anders zeggen: je hoeft helemaal niets te includen. Je kunt ook zorgen dat de bezoeker van de website zélf het script ophaalt van jouw server. Dan heb je het probleem helemaal niet. Daarvoor zijn verschillende manieren te gebruiken (afhankelijk van wat je precies wil). Een hele gangbare manier is om je script als plaatje te vermommen, als javascript kan ook, of als html pagina in een (i)frame.
Als je het script als een plaatje vermomd dan include je hem niet meer, maar zet je gewoon een link naar het plaatje in je iframe. Verschil is dat de server niet meer een request doet naar je script, maar de bezoeker zelf.

Regeren is vooruitschuiven


Acties:
  • 0 Henk 'm!

  • BratMokstrof
  • Registratie: Mei 2003
  • Laatst online: 14-09 21:43
T-MOB schreef op dinsdag 31 mei 2005 @ 11:33:
Ok laat ik het anders zeggen: je hoeft helemaal niets te includen. Je kunt ook zorgen dat de bezoeker van de website zélf het script ophaalt van jouw server. Dan heb je het probleem helemaal niet. Daarvoor zijn verschillende manieren te gebruiken (afhankelijk van wat je precies wil). Een hele gangbare manier is om je script als plaatje te vermommen, als javascript kan ook, of als html pagina in een (i)frame.
Als je het script als een plaatje vermomd dan include je hem niet meer, maar zet je gewoon een link naar het plaatje in je iframe. Verschil is dat de server niet meer een request doet naar je script, maar de bezoeker zelf.
Ehhhhhhhhhhhh, heel vaag ongeveer snap ik het denk ik, maar heb je ook wat details in de uitverkoop?

Krijg ik als output een plaatje, dat lijkt me niet, maar hoe zie je het precies voor je? :)
Hoe "roep ik het aan", zonder te includen? ...

Help? ;D

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

BratMokstrof schreef op dinsdag 31 mei 2005 @ 11:37:
Krijg ik als output een plaatje, dat lijkt me niet, maar hoe zie je het precies voor je? :)
Jawel, een plaatje kan bijvoorbeeld prima. Zie ook onder andere deze en deze manual pages.
Hoe "roep ik het aan", zonder te includen? ...
In het geval van een image, heel simpel:
HTML:
1
<img src="linknaarscript.php" alt="" />

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • BratMokstrof
  • Registratie: Mei 2003
  • Laatst online: 14-09 21:43
Die calls ken ik, maar wordt dan het gedeelte dat ik maak een JPG in plaats van plain-tekst? Dat lijkt me toch ook niet zo mooi ... :(

Het gaat om een site-onderdeel, met lijsten e.d. het zou toch jammer zijn als de zoek-functionaliteit daarvan verloren gaat ...?

Of zou ik in mijn eigen plaatje moeten includen en daar variabelen voorbereiden, maar hoe kom ik daar dan later nog bij ...?

.....

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Dan doe je gewoon een iframe met daarin een directe link naar je script...kun je alleen geen sessions gebruiken. Feit blijft dat je niet hoeft te includen.

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • BratMokstrof
  • Registratie: Mei 2003
  • Laatst online: 14-09 21:43
-NMe- schreef op dinsdag 31 mei 2005 @ 11:56:
Dan doe je gewoon een iframe met daarin een directe link naar je script...kun je alleen geen sessions gebruiken. Feit blijft dat je niet hoeft te includen.
Nope, ik snap je nog steeds niet ... Sorry ;(

Acties:
  • 0 Henk 'm!

  • T-MOB
  • Registratie: Maart 2001
  • Laatst online: 22:34
Misschien is het handig dat je iets meer verteld over wat je precies aan het doen bent. Ik ben er impliciet vanuit gegaan dat je het gebruikt om statistieken van een webpagina bij te houden. Als je script ook nog textuele output geeft is het nog makkelijker. Dan roep je gewoon je script aan in de aanroep naar het iframe.
code:
1
<iframe src="jouwserver/script.php"></iframe>

[ Voor 7% gewijzigd door T-MOB op 31-05-2005 11:59 ]

Regeren is vooruitschuiven


Acties:
  • 0 Henk 'm!

  • BratMokstrof
  • Registratie: Mei 2003
  • Laatst online: 14-09 21:43
Ik heb het! Wooh!

Het img. idee was de oplossing :)
Alleen anders dan ik dacht.

In de IMG kan ik nu alle "boekhouding" doen m.b.t. het IP en als ik het img gewoon in de pagina laad, is dat verder geen probleem.

Verder ehhhhhh, sja.
Super gewoon :D
Thnx!

Jullie zijn vast allemaal jongens, maar andrs had ik jullie gezoend! ;D

Acties:
  • 0 Henk 'm!

Verwijderd

En waarom zou je jongens niet zoenen :9
Modbreak:Dit is de huiskamer niet.

[ Voor 33% gewijzigd door NMe op 31-05-2005 13:01 ]


Acties:
  • 0 Henk 'm!

  • T-MOB
  • Registratie: Maart 2001
  • Laatst online: 22:34
BratMokstrof schreef op dinsdag 31 mei 2005 @ 12:02:
Ik heb het! Wooh!

Het img. idee was de oplossing :)
Blij dat je hem door hebt, let wel op dat browsers de goede gewoonte hebben om plaatjes te cachen. Dat wil zeggen dat de meeste browsers een plaatje maar één maal downloaden en vervolgens van de harde schijf serveren. Dat kan je administratie enigszins in de war schoppen, zorg daarom voor headers die het cachen voorkomen.
In de PHP documentatie van de header() functie staat een codevoorbeeld met een rits headers die caching voorkomen. Vertrouw je dit niet (of ondervind je problemen) dan kun je voor de zekerheid een dynamische get-variabele aan de img-aanroep toevoegen. Je doeter verder niets mee, maar de browser weet niet meer dat het om hetzelfde "plaatje" gaat :)
PHP:
1
2
$noCache = time();
echo '[img]"jouwServer/script.php?bogus='[/img]';

Regeren is vooruitschuiven

Pagina: 1