1

PHP / MySQLログインコードを使用していて、Cookieを永続的に(ブラウザを閉じることで)保存したいのですが、機能しません。正常にログインし、ブラウザを閉じるまで記憶しますが、後でそれを忘れます。どうすればこれを修正できますか?

これは私が思うすべての重要なコードです。

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

3 に答える 3

2

Cookie の有効期限を設定する必要があります。

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

これにより、たとえば 1 時間持続します。時間を設定しない場合、セッションが終了すると期限切れになります。

あなたが session_set_cookie_params で寿命を設定していることに気付きました.

于 2012-04-12T11:02:05.783 に答える
1

今年はそれ以下に留まるのがベスト…

2038 

そうしないと、問題が発生し、ブラウザに保存されません。

于 2012-04-12T11:04:40.223 に答える
0

Cookie を次のように設定しています。

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

Cookie の有効期限が 1000000*7*24*60*60 = 7*1000000/365 = 19000+ 年に設定されます。私の知る限り、UNIX タイムスタンプはそれほど長期間設定されていません。

于 2012-04-12T11:06:20.103 に答える