Hallo, also wenn ich mir das Script anschaue..
im Testscript befindet sich folgendes:
das bedeutet, dass positive Meldung kommt, wenn $Session->bUsesFallback true zurückliefert.
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";
}
und in der Klasse ist der Wert der Variable false (Initialisierung) und nachher in einem bestimmten Falle wird true gesetzt - nämlich wenn keine Cookies akzeptiert werden.
if (!$bUseFallback || $bIgnore) {
$this->bUsesFallback = true;
return;
}
Also meiner Meinung nach fehlt ein ! (Negierung) vorm
if ($Session->bUsesFallback)
Also ändere die Zeile im Testscript:
vorher: if ($Session->bUsesFallback)
nachher: if (!$Session->bUsesFallback)
cu kati
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;
}
}