Apache streikt nicht mehr bei Cookies: Unterschied zwischen den Versionen

Aus NOBAQ
Zur Navigation springenZur Suche springen
(Die Seite wurde neu angelegt: x)
 
Zeile 1: Zeile 1:
x
+
<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, 17: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.