Follow along with the video below to see how to install our site as a web app on your home screen.
Anmerkung: This feature may not be available in some browsers.
Okay, ich versuche mich mal an dem unteren Vorgehen!
Zukünftig werde ich erst einmal alle Posts mit vielen Votes lesen, bevor ich losgehe ...
Wieso hat dann der untere Post nicht den grünen Hacken?
Notice: Undefined variable: mysqli in .........
function rememberMe() {
$cookie = isset($_COOKIE['rememberme']) ? $_COOKIE['rememberme'] : '';
if ($cookie) { //falls Cookie vorhanden, dann -->
list ($user_id, $token, $mac) = explode(':', $cookie);
if ($mac !== hash_hmac('sha256', $user_id . ':' . $token, 'SECRET_KEY')) {
return false;
}
$stmt = $mysqli->prepare("SELECT user_id, token, password FROM account WHERE user_ID = ? LIMIT 1");
$stmt->bind_param('i', $user_id);
$stmt->execute();
$stmt->store_result();
$stmt->bind_result($user_id, $user_token, $password);
$stmt->fetch();
if ( $user_token = $token) {
$user_browser = $_SERVER['HTTP_USER_AGENT'];
// XSS-Schutz, denn eventuell wir der Wert gedruckt
$user_id = preg_replace("/[^0-9]+/", "", $user_id);
$_SESSION['user_id'] = $user_id;
// XSS-Schutz, denn eventuell wir der Wert gedruckt
$username = preg_replace("/[^a-zA-Z0-9_\-]+/",
"",
$username);
$_SESSION['username'] = $username;
$_SESSION['login_string'] = hash('sha512',
$password . $user_browser);
$_SESSION['user_ID'] =$user_id;
// Login erfolgreich.
}
}
}
Notice: Undefined variable: mysqli in C:\xampp\htdocs\php-beispiele\Version-2015-01-26\includes\functions.php on line 111
Fatal error: Call to a member function prepare() on null in C:\xampp\htdocs\php-beispiele\Version-2015-01-26\includes\functions.php on line 111
$mysqli = new mysqli("localhost", "BENUTZER", "PASSWORT", "TABELLENNAME");
Als Instanzvariable. Gibt natürlich mehrere Ansätze, vielleicht solltest du dir mal was zu OOP (Objekorientierte Programmierung) in PHP anschauen.Und wie könnte ich das?
Okay, jetzt funktioniert irgendetwas mit der DB-Abfrage nicht mehr.
Ich weiß aber gerade nicht, was, da es in der einen Datei ging und nur beim 1:1 kopieren auf einmal nicht mehr geht.
Hier der Fehler:
Und hier der entsprechende Code:
Den Fehler kann ich gerade nicht erkennen.PHP:function rememberMe() { $cookie = isset($_COOKIE['rememberme']) ? $_COOKIE['rememberme'] : ''; if ($cookie) { //falls Cookie vorhanden, dann --> list ($user_id, $token, $mac) = explode(':', $cookie); if ($mac !== hash_hmac('sha256', $user_id . ':' . $token, 'SECRET_KEY')) { return false; } $stmt = $mysqli->prepare("SELECT user_id, token, password FROM account WHERE user_ID = ? LIMIT 1"); $stmt->bind_param('i', $user_id); $stmt->execute(); $stmt->store_result(); $stmt->bind_result($user_id, $user_token, $password); $stmt->fetch(); if ( $user_token = $token) { $user_browser = $_SERVER['HTTP_USER_AGENT']; // XSS-Schutz, denn eventuell wir der Wert gedruckt $user_id = preg_replace("/[^0-9]+/", "", $user_id); $_SESSION['user_id'] = $user_id; // XSS-Schutz, denn eventuell wir der Wert gedruckt $username = preg_replace("/[^a-zA-Z0-9_\-]+/", "", $username); $_SESSION['username'] = $username; $_SESSION['login_string'] = hash('sha512', $password . $user_browser); $_SESSION['user_ID'] =$user_id; // Login erfolgreich. } } }
Und ja, ich weiß, dass die Konstante 'SECRET_KEY' die komplette Funktion unsicher macht, aber es ist ja nur zu Testzwecken.
if ($user_token = $token) {
Ja genau das habe ich auch schon angefangen zu lesen.Der Beitrag von Peter Kropff zu OOP mit PHP 5 ist aufjedenfall empfehlenswert.
Ja, das ist jetzt der nächste Schritt :) es sollte erst einmal das Einfache funktionieren, danach kann ich mich an hash_equal und timesafecompare ran machen :) das ist dann die Hausaufgabe für morgen :)Kleiner Fehler, große Wirkung ;)
Und wie gesagt, wenn timeSafeCompare empfohlen wird und auch als fertige Funktion vorliegt, sollte man das auch verwenden.
Ich hoffe du hast gemerkt das scbawik dich auf den Fehler in der Verzweigung aufmerksam machen wollte. Dort machst du eine Zuweisung und keinen Vergleich. Solltest du es bemerkt haben, entschuldige. ;)Ja genau das habe ich auch schon angefangen zu lesen.
Der Mann hat teils sehr lustige Beispiele :)
Ja, das ist jetzt der nächste Schritt :) es sollte erst einmal das Einfache funktionieren, danach kann ich mich an hash_equal und timesafecompare ran machen :) das ist dann die Hausaufgabe für morgen :)
So langsam bin ich mit meinen Fortschritten zu frieden. Inzwischen verstehe ich, was ich hier zusammen kopiere
Kommt darauf an was du überprüfen möchtest.Grrr .... nicht bemerkt :)
Danke für den Hinweise! Das war zu subtil :)
Und da ich gerade timesafecompare eingebaut habe und es funktioniert, hätte ich den Fehler auch nie bemerkt.
Richtig müsste es doch so heißen: !== oder?
if ($user_token == $token) {
if ($user_token === $token) {
if ($user_token != $token) {
if ($user_token !== $token) {
Richtig müsste es doch so heißen: !== oder?