Apache streikt nicht mehr bei Cookies: Unterschied zwischen den Versionen
Aus NOBAQ
Zur Navigation springenZur Suche springenNiki (Diskussion | Beiträge) (Die Seite wurde neu angelegt: x) |
Niki (Diskussion | Beiträge) |
||
Zeile 1: | Zeile 1: | ||
− | + | <section begin="head"/> | |
+ | Wie im vorigen Beitrag bereits als Ausweg genannt, lasse ich nun wirklich mein CMS die Benutzer überprüfen, hole mir die Session-ID und setze das Cookie... | ||
+ | <section end="head"/> | ||
+ | |||
+ | Das zugehörige PHP-Code sieht so aus: | ||
+ | |||
+ | <source lang="php"> | ||
+ | <? | ||
+ | require_once(dirname(__FILE__) . ‘/inc/Page.inc.php’); | ||
+ | |||
+ | $page = new Page(__FILE__); | ||
+ | $page->SetTitle(’Shareaza’); | ||
+ | $page->SetPageOption(PAGEOPT_NORIGHTROW); | ||
+ | $page->SetPageOption(PAGEOPT_NOLEFTROW); | ||
+ | $page->SetMID(’SHAREAZA_PHP’); | ||
+ | |||
+ | $acl = &$page->GetACL(); | ||
+ | $acl->SetPublic(false); | ||
+ | $acl->AddGroup(’intern’); | ||
+ | |||
+ | if(!$acl->IsAllowed()) | ||
+ | { | ||
+ | $page->Header(); | ||
+ | } | ||
+ | |||
+ | $sid = GetShareazaSID(); | ||
+ | |||
+ | if(!$sid) | ||
+ | { | ||
+ | $page->Header(); | ||
+ | ?> | ||
+ | <h1>offline</h1> | ||
+ | <p> | ||
+ | |||
+ | Shareaza antwortet leider nicht :-( | ||
+ | |||
+ | </p> | ||
+ | <? | ||
+ | $page->Footer(); | ||
+ | } | ||
+ | |||
+ | // Setze passendes Cookie | ||
+ | header(”Set-Cookie: ShareazaRemote=$sid; path=/”); | ||
+ | |||
+ | flush(); | ||
+ | |||
+ | $page->Header(); | ||
+ | |||
+ | ?> | ||
+ | |||
+ | <h1>Shareaza</h1> | ||
+ | |||
+ | <iframe xsrc=”<?=$WebBase?>/shareaza/home?<?=$sid?>” mce_src=”<?=$WebBase?>/shareaza/home?<?=$sid?>” width=”100%” height=”1200″ name=”shareaza” scrolling=”no” frame marginheight=”0″ marginwidth=”0″> | ||
+ | Dein Browser unterstützt leider keine eingebetteten Frames! | ||
+ | </iframe> | ||
+ | |||
+ | <? | ||
+ | $page->Footer(); | ||
+ | |||
+ | function GetShareazaSID() | ||
+ | { | ||
+ | $data = "GET /remote/?submit=1&username=user&password=pass HTTP/1.1 | ||
+ | Host: 192.168.0.4:4711 | ||
+ | Connection: Close | ||
+ | "; | ||
+ | |||
+ | $fp = fsockopen(’192.168.0.4′, 4711, $errno, $errstr, 10); | ||
+ | if(!$fp) | ||
+ | { | ||
+ | return 0; | ||
+ | } | ||
+ | fputs($fp, $data); | ||
+ | |||
+ | $data = ""; | ||
+ | while(!feof($fp)) | ||
+ | { | ||
+ | $data .= fgets($fp, 4096); | ||
+ | if(preg_match(”/ShareazaRemote=([0-9]+)/”, $data, $sid)) | ||
+ | { | ||
+ | fclose($fp); | ||
+ | return $sid[1]; | ||
+ | } | ||
+ | } | ||
+ | |||
+ | fclose($fp); | ||
+ | |||
+ | return 0; | ||
+ | } | ||
+ | |||
+ | ?> | ||
+ | </source> | ||
+ | |||
+ | Wie man sieht, wird die Legitimität des Benutzers direkt durch das CMS gecheckt (zusätzlich prüfe ich das durch $acl->IsAllowed(), damit die SID nicht unnötig geholt werden muss), danach wird die SID geholt, mit Set-Cookie das Cookie gesetzt und der iframe geladen. | ||
+ | |||
+ | [[Kategorie:Weblog]] |
Version vom 1. Februar 2008, 16:28 Uhr
Wie im vorigen Beitrag bereits als Ausweg genannt, lasse ich nun wirklich mein CMS die Benutzer überprüfen, hole mir die Session-ID und setze das Cookie...
Das zugehörige PHP-Code sieht so aus:
<?
require_once(dirname(__FILE__) . ‘/inc/Page.inc.php’);
$page = new Page(__FILE__);
$page->SetTitle(’Shareaza’);
$page->SetPageOption(PAGEOPT_NORIGHTROW);
$page->SetPageOption(PAGEOPT_NOLEFTROW);
$page->SetMID(’SHAREAZA_PHP’);
$acl = &$page->GetACL();
$acl->SetPublic(false);
$acl->AddGroup(’intern’);
if(!$acl->IsAllowed())
{
$page->Header();
}
$sid = GetShareazaSID();
if(!$sid)
{
$page->Header();
?>
<h1>offline</h1>
<p>
Shareaza antwortet leider nicht :-(
</p>
<?
$page->Footer();
}
// Setze passendes Cookie
header(”Set-Cookie: ShareazaRemote=$sid; path=/”);
flush();
$page->Header();
?>
<h1>Shareaza</h1>
<iframe xsrc=”<?=$WebBase?>/shareaza/home?<?=$sid?>” mce_src=”<?=$WebBase?>/shareaza/home?<?=$sid?>” width=”100%” height=”1200″ name=”shareaza” scrolling=”no” frame marginheight=”0″ marginwidth=”0″>
Dein Browser unterstützt leider keine eingebetteten Frames!
</iframe>
<?
$page->Footer();
function GetShareazaSID()
{
$data = "GET /remote/?submit=1&username=user&password=pass HTTP/1.1
Host: 192.168.0.4:4711
Connection: Close
";
$fp = fsockopen(’192.168.0.4′, 4711, $errno, $errstr, 10);
if(!$fp)
{
return 0;
}
fputs($fp, $data);
$data = "";
while(!feof($fp))
{
$data .= fgets($fp, 4096);
if(preg_match(”/ShareazaRemote=([0-9]+)/”, $data, $sid))
{
fclose($fp);
return $sid[1];
}
}
fclose($fp);
return 0;
}
?>
Wie man sieht, wird die Legitimität des Benutzers direkt durch das CMS gecheckt (zusätzlich prüfe ich das durch $acl->IsAllowed(), damit die SID nicht unnötig geholt werden muss), danach wird die SID geholt, mit Set-Cookie das Cookie gesetzt und der iframe geladen.