hey leute
habe ein problem mit meinem script und ich komme einfach nicht darauf, was da los ist.
zur erklaerung. es gibt eine tabelle mit id, username, password, sessionid und timestamp.
beim einloggen wird die sessionid und der timestamp in der tabelle gespeichert. (klappt alles)
beim ausloggen sollen beide wieder geloescht werden. hier klappt nur der sessionid loeschen teil!
dazu die scripts:
logout.php
classDatabase.php
es wird keine fehlermeldung ausgegeben. nur wenn ich die tabelle der datenbank ueberpruefe wurde der timestamp nicht geloescht....
koennt ihr mir helfen?
EDIT: eigentlich interessant sind (glaub ich) nur die funktonen der datenbank klasse deletesessionid und deletetimestamp.
meiner meinung nach sind sie komplett gleich, nur mit dem unterschied das deletesessionid funktioniert und die session id loescht und timestamp nicht.
ich habe sogar beiden den gleichen typ zugeordnet, um es zu testen (char). trotzdem hat es nicht geklappt.
okay problem geloest.
es war ein sehr dummer fehler von mir:
man vergleiche die beiden klammern miteinander und frage sich wieso das loeschen der sessionid erfolgreich war und wieso das loeschen des timestamps nicht....
(ich sollte die farben der highlights in meinem editor aendern... fuer mich sahen die beiden klammern gleich aus.. erst hier ist es mir aufgefallen)
habe ein problem mit meinem script und ich komme einfach nicht darauf, was da los ist.
zur erklaerung. es gibt eine tabelle mit id, username, password, sessionid und timestamp.
beim einloggen wird die sessionid und der timestamp in der tabelle gespeichert. (klappt alles)
beim ausloggen sollen beide wieder geloescht werden. hier klappt nur der sessionid loeschen teil!
dazu die scripts:
logout.php
PHP:
<?php
require_once '../../common.php';
if (isset($_COOKIE['PHPSESSID']))
{
$_SESSION = array();
setcookie('PHPSESSID', '', time()-42000, '/');
if ('POST' == $_SERVER['REQUEST_METHOD'])
{
$SessionID = $_COOKIE['PHPSESSID'];
$Database = new Database(DB_SERVER, DB_USER, DB_PASSWORD, DB_NAME);
if ($Database->checkSessionID($SessionID))
{
$Database->deleteTimestamp($SeesionID);
$Database->deleteSessionID($SessionID);
echo '
<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US" lang="en-US">
<head>
<title>New document</title>
<meta http-equiv="refresh" content="5; URL=../../index.php">
</head>
<body>
sie wurden erfolgreich ausgeloggt!
</body>
</html>';
}
else
{
echo 'checkSessionID hat ne fehler festgestellt';
}
}
else
{
echo 'schade!';
}
unset($SessionID, $Database);
}
else
{
echo 'you need to allow us to creat cookies';
}
?>
PHP:
<?php
class Database extends MySQLi
{
public function __construct($Location = '', $Username = '', $Password = '', $DBname = '')
{
parent::__construct($Location, $Username, $Password, $DBname);
}
public function insertTimestamp($Timestamp, $Username)
{
if ($mysqli_stmt = parent::stmt_init())
{
$sql = 'UPDATE
user
SET
Timestamp = ?
WHERE
Username = ?';
$mysqli_stmt->prepare($sql);
$mysqli_stmt->bind_param('ss', $Timestamp, $Username);
$mysqli_stmt->execute();
$mysqli_stmt->close();
}
}
public function deleteTimestamp($SessionID)
{
if ($mysqli_stmt = parent::stmt_init())
{
$sql = 'UPDATE
user
SET
Timestamp = 0
WHERE
SessionID = ?';
$mysqli_stmt->prepare($sql);
$mysqli_stmt->bind_param('s', $SessionID);
$mysqli_stmt->execute();
$mysqli_stmt->close();
}
}
public function insertSessionID($SessionID, $Username)
{
if ($mysqli_stmt = parent::stmt_init())
{
$sql = 'UPDATE
user
SET
SessionID = ?
WHERE
Username = ?';
$mysqli_stmt->prepare($sql);
$mysqli_stmt->bind_param('ss', $SessionID, $Username);
$mysqli_stmt->execute();
$mysqli_stmt->close();
}
}
public function deleteSessionID($SessionID)
{
if ($mysqli_stmt = parent::stmt_init())
{
$sql = 'UPDATE
user
SET
SessionID = 0
WHERE
SessionID = ?';
$mysqli_stmt->prepare($sql);
$mysqli_stmt->bind_param('s', $SessionID);
$mysqli_stmt->execute();
$mysqli_stmt->close();
}
}
public function getUsername($SessionID)
{
if ($mysqli_stmt = parent::stmt_init())
{
$sql = 'SELECT
Username
FROM
user
WHERE
SessionID = ?';
$mysqli_stmt->prepare($sql);
$mysqli_stmt->bind_param('s', $SessionID);
$mysqli_stmt->execute();
$mysqli_stmt->bind_result($result1);
if ($mysqli_stmt->fetch())
{
echo $result1;
}
else
{
echo 'errrrrror';
}
}
$mysqli_stmt->close();
}
public function checkSessionID($SessionID)
{
if ($mysqli_stmt = parent::stmt_init())
{
$sql = 'SELECT
SessionID
FROM
user
WHERE
SessionID = ?';
$mysqli_stmt->prepare($sql);
$mysqli_stmt->bind_param('s', $SessionID);
$mysqli_stmt->execute();
$mysqli_stmt->bind_result($result1);
if ($mysqli_stmt->fetch())
{
if ($result1 == $SessionID)
{
return TRUE;
}
else
{
return FALSE;
}
}
else
{
return FALSE;
}
}
$mysqli_stmt->close();
}
}
?>
koennt ihr mir helfen?
EDIT: eigentlich interessant sind (glaub ich) nur die funktonen der datenbank klasse deletesessionid und deletetimestamp.
meiner meinung nach sind sie komplett gleich, nur mit dem unterschied das deletesessionid funktioniert und die session id loescht und timestamp nicht.
ich habe sogar beiden den gleichen typ zugeordnet, um es zu testen (char). trotzdem hat es nicht geklappt.
okay problem geloest.
es war ein sehr dummer fehler von mir:
Code:
[COLOR=#000000][COLOR=#0000bb]$Database[/COLOR][COLOR=#007700]->[/COLOR][COLOR=#0000bb]deleteTimestamp[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000bb]$SeesionID[/COLOR][COLOR=#007700]);
[/COLOR][COLOR=#0000bb]$Database[/COLOR][COLOR=#007700]->[/COLOR][COLOR=#0000bb]deleteSessionID[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000bb]$SessionID[/COLOR][COLOR=#007700]);[/COLOR][/COLOR]
man vergleiche die beiden klammern miteinander und frage sich wieso das loeschen der sessionid erfolgreich war und wieso das loeschen des timestamps nicht....
(ich sollte die farben der highlights in meinem editor aendern... fuer mich sahen die beiden klammern gleich aus.. erst hier ist es mir aufgefallen)
Zuletzt bearbeitet von einem Moderator: