2012-04-12 21 views
1

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; 
} 
?> 

Antwort

2

Sie müssen die Ablaufzeit für das Cookie setzen:

setcookie('tzRemember',$_POST['rememberMe'], time()+3600); 

Das wird es für eine Stunde zum Beispiel zuletzt machen. Wenn Sie keine Zeit festlegen, wird sie nach Beendigung der Sitzung ablaufen.

Ich habe gerade bemerkt, dass Sie die Lebensdauer mit session_set_cookie_params einstellen - wie andere gesagt haben, setzen Sie diesen Weg zu weit in die Zukunft.

+0

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

1

Am besten ist es unter diesem Jahr ...

2038 

Ansonsten bleiben wird es Probleme und Ihr Browser nicht gespeichert werden.

+0

Wahrscheinlich ein guter Punkt, aber meintest du nicht 2038? :-) – cypher

+1

Danke, ich habe es repariert! –

0

Sie setzen das Cookie als:

session_set_cookie_params(1000000*7*24*60*60); 

Welche das Cookie setzt in 1000000 * 7 * 24 * 60 * 60 = 7 * 1000000/365 = 19000+ Jahren endet. Soweit ich weiß, ist UNIX-Zeitstempel nicht für diese lange Dauer festgelegt.

Verwandte Themen