Hallo Günther,
- Sporadisch tritt die Fehlermeldung "Notice: Object of class mysqli_result could not be converted to int in [...]index.php on line 85" auf. In dieser Zeile steht nichts außer "session_start();".
Speicherst Du irgendwo MySQL-Result-Objekte in der Session (auch indirekt innerhalb von anderen Objekten)? Wenn ja: Das funktioniert so nicht, da MySQL-Result-Objekte nicht serialisiert und erfolgreich wieder deserialisiert werden können.
Wenn's das nicht ist und Du das Problem isolieren willst: Definiere Dir per set_error_handler einen eigenen Error-Handler. Sobald eben diese Notice kommt (Du kannst ja Dateiname und Zeile überprüfen und ansonsten nur die Meldung selbst wieder ausgeben) liest Du Dir aus $_REQUEST die Session-ID ein ($sessid = $_REQUEST[session_name ()];
- session_id () wird evtl. nicht funktionieren, da session_start () noch nicht abgeschlossen ist) und liest Dir manuell aus der DB die serialisierten Daten zu der zugehörigen Session aus und speicherst sie z.B. in einem Logfile oder gibst sie aus. Dann schaust Du Dir diese serialisierten Daten an und überlegst, woran das liegen könnte...
Zu Deinem anderen Problem:
define('SESSION_LIFETIME', 30); // in minutes
[...]
ini_set('session.gc_maxlifetime', (int)SESSION_LIFETIME*60);
Ja, Du hast richtig gesehen, dass session.gc_maxlifetime in Sekunden angegeben wird, d.h. Du multiplizierst Deine Konstante SESSION_LIFETIME mit 60. Was Du aber nicht bedenkst, ist, dass
public function _gc($sess_lifetime = SESSION_LIFETIME)
die Methode _gc(), die Du an session_set_save_handler übergibst, weiterhin Sekunden erhält und damit
$db->query("DELETE FROM sessions WHERE last_access < DATE_SUB(NOW(), INTERVAL " . $sess_lifetime . " MINUTE)");
hier INTERVAL ... SECOND stehen müsste.
(Und den Wert für Deinen Default-Parameter müsstet Du natürlich auch anpassen.)
Viele Grüße,
Christian