Ich benutze einen PHP/MySQL-Login-Code, und ich möchte es dauerhaft speichern (über Browser schließt), aber es funktioniert nicht. Es meldet sich gut an und wird sich bis zum Schließen eines Browsers erinnern, vergisst es aber danach. Wie kann ich das beheben?PHP-Login-Code nicht dauerhafte Cookie setzen (über Browser schließen)
Das ist alles wichtige Code, den ich denke;
<?php
define('INCLUDE_CHECK',true);
require 'connect.php';
require 'functions.php';
// Those two files can be included only if INCLUDE_CHECK is defined
session_name('tzLogin');
// Starting the session
session_set_cookie_params(1000000*7*24*60*60);
session_start();
if($_SESSION['id'] && !isset($_COOKIE['tzRemember']) && !$_SESSION['rememberMe'])
{
// If you are logged in, but you don't have the tzRemember cookie (browser restart)
// and you have not checked the rememberMe checkbox:
$_SESSION = array();
session_destroy();
// Destroy the session
}
if(isset($_GET['logoff']))
{
$_SESSION = array();
session_destroy();
header("Location: index.php");
exit;
}
if($_POST['submit']=='Login')
{
// Checking whether the Login form has been submitted
$err = array();
// Will hold our errors
if(!$_POST['username'] || !$_POST['password'])
$err[] = 'All the fields must be filled in!';
if(!count($err))
{
$_POST['username'] = mysql_real_escape_string($_POST['username']);
$_POST['password'] = mysql_real_escape_string($_POST['password']);
$_POST['rememberMe'] = (int)$_POST['rememberMe'];
// Escaping all input data
$row = mysql_fetch_assoc(mysql_query("SELECT id,usr FROM tz_members WHERE usr='{$_POST['username']}' AND pass='".md5($_POST['password'])."'"));
if($row['usr'])
{
// If everything is OK login
$_SESSION['usr']=$row['usr'];
$_SESSION['id'] = $row['id'];
$_SESSION['rememberMe'] = $_POST['rememberMe'];
// Store some data in the session
setcookie('tzRemember',$_POST['rememberMe']);
// We create the tzRemember cookie
}
else $err[]='Wrong username and/or password!';
}
if($err)
$_SESSION['msg']['login-err'] = implode('<br />',$err);
// Save the error messages in the session
header("Location: nowloggedin.php");
exit;
}
?>
Nur zur Erinnerung: Ein schöner Weg, den gewünschten Zeitunterschied besser zu "berechnen", ist mit Hilfe von 'strtotime (" + 1 day ")' anstelle dieser 'time() * 60 * 60 * 24' Monstrositäten . [strtotime()] (http://php.net/manual/en/datetime.formats.relative.php) – maxpower9000