Hallo,
ich habe pronleme mit der Session_start() Funktion in meinem Script.
Ich habe mir die Fallback-Klasse 2.0 von <a href="http://www.develnet.org/tech/tutorials/2.1.html">http://www.develnet.org/tech/tutorials/2.1.html</a> runtergeladen und das dazugehörige Test-Script.
Wenn ich das Testscript aufrufe wird aber immer die Meldung "Der Client nimmt keine Cookies an! Wir brauchen einen Fallback." ausgegeben.
Das ist aber nicht richtig, da ich den cookie in meinem Temp-Pfad sehen kann.
Ich benutze PHP 4.2.1, den Apache 2.0.39 und entweder den MSIE 6.0 oder den Netscape 7.0 Beta Browser.
Schaut euch das Script mal an:
[test.session.php]
<?php
// Session initialisieren
require_once ('class.Session.inc.php');
$Session =& Session::getInstance();
$Session->init();
// Für die Funktion hab ich keine erklärung ???
function foo() {
$Session =& Session::getInstance();
echo $Session->url('test.session.php');
}
if ($Session->bUsesFallback)
{ echo "<P>Cookie wurde gesetzt. ";
echo "Kein Fallback nötig.</P>\n";
}
else{
echo "<P>Der Client nimmt keine Cookies an! ";
echo "Wir brauchen einen Fallback.</P>\n";
}
?>
[class.Session.inc.php]
class Session {
var $bUsesFallback = false;
// --- Singleton ------------------------------------------------
function &getInstance() {
static $Instance;
if (!isset($Instance)) { $Instance = new Session(); }
return $Instance;
}
function init($bUseFallback = true, $sIgnore = '',$sessionName = 'sid') {
global $HTTP_POST_VARS, $HTTP_GET_VARS, $HTTP_COOKIE_VARS;
session_name(isset($sessionName) ? $sessionName : session_name());
@session_start();
// ----------------------------------------------------------
// Check if we should ignore user agents
/*
$bIgnore = false;
$aIgnore = explode(',', $sIgnore);
$sAgent = strtolower(getenv('HTTP_USER_AGENT'));
for ($i=0; $i<sizeof($aIgnore); $i++) {
$sStr = trim(strtolower($aIgnore[$i]));
if (strlen($sStr) > 0 && substr_count($sAgent, $sStr) > 0) {
$bIgnore = true;
break;
}
}
*/
// ----------------------------------------------------------
if (!$bUseFallback || $bIgnore) {
$this->bUsesFallback = true;
return;
}
// ----------------------------------------------------------
header('Expires: Sat, 05 Aug 2000 22:27:00 GMT');
header('Last-Modified: ' . gmdate('D, d M Y H:i:s') . ' GMT');
header('Cache-Control: no-cache, must-revalidate');
header('Pragma: no-cache');
header('Cache-Control: post-check=0, pre-check=0');
// Generate a new session id if given session seems wrong
if (strlen(session_id()) != 32) {
mt_srand ((double)microtime()*1000000);
session_id(md5(uniqid(mt_rand())));
}
// ----------------------------------------------------------
if (isset($_GET)) {
$aGet = &$_GET;
$aPost = &$_POST;
$aCookie = &$_COOKIE;
} else {
$aGet = &$HTTP_GET_VARS;
$aPost = &$HTTP_POST_VARS;
$aCookie = &$HTTP_COOKIE_VARS;
}
// ----------------------------------------------------------
$bGotSid = false;
if (isset($aCookie[session_name()])
&& @strlen($aCookie[session_name()]) == 32) {
$bGotSid = true;
}
if (isset($aPost[session_name()])
&& @strlen($aPost[session_name()]) == 32) {
$bGotSid = true;
}
if (isset($aGet[session_name()])
&& @strlen($aGet[session_name()]) == 32) {
$bGotSid = true;
}
if (!$bGotSid) {
$this->redirectTo(getenv('REQUEST_URI'));
}
if (isset($aCookie[session_name()])
&& @strlen($aCookie[session_name()]) == 32) {
$this->bUsesFallback = true;
}
}