0

そのため、この PHP コードで 1 週間苦労していますが、まだ動作しません。ユーザーに 1 年間 Cookie を設定する必要があります。また、ユーザーがブラウザーを閉じて、後で再度サイトにアクセスしたときに、再度ログインする必要がないようにする必要があります。誰かが私のファイルに設定されるべきコードを書くことができれば、私はとても感謝しています. 私の元のコードは次のとおりです。これは、config.php ファイルからのものです。よろしくお願いします!

function create_slrememberme() {
        $key = md5(uniqid(rand(), true));
        global $conn;
        $sql="update members set remember_me_time='".date('Y-m-d H:i:s')."', remember_me_key='".$key."' WHERE username='".mysql_real_escape_string($_SESSION[USERNAME])."'";
        $conn->execute($sql);
        setcookie('slrememberme', gzcompress(serialize(array($_SESSION[USERNAME], $key)), 9), time()+60*60*24*30);
}

function destroy_slrememberme($username) {
        if (strlen($username) > 0) {
                global $conn;
                $sql="update members set remember_me_time=NULL, remember_me_key=NULL WHERE username='".mysql_real_escape_string($username)."'";
                $conn->execute($sql);
        }
        setcookie ("slrememberme", "", time() - 3600);
}

if (!isset($_SESSION["USERNAME"]) && isset($_COOKIE['slrememberme'])) 
{
        $sql="update members set remember_me_time=NULL and remember_me_key=NULL WHERE remember_me_time<'".date('Y-m-d H:i:s', mktime(0, 0, 0, date("m")-1, date("d"),   date("Y")))."'";
        $conn->execute($sql);
        list($username, $key) = @unserialize(gzuncompress(stripslashes($_COOKIE['slrememberme'])));
        if (strlen($username) > 0 && strlen($key) > 0)
        {
            $sql="SELECT status,USERID,email,username,verified from members WHERE username='".mysql_real_escape_string($username)."' and remember_me_key='".mysql_real_escape_string($key)."'";
            $rs=$conn->execute($sql);
            if($rs->recordcount()<1)
            {
                $error = "Error: Could not locate your account.";
            }
            elseif($rs->fields['status'] == "0")
            {
                $error = "Error: Your account has been disabled by the administrator.";
            }
            if($error=="")
            {               
                $_SESSION['USERID']=$rs->fields['USERID'];
                $_SESSION['EMAIL']=$rs->fields['email'];
                $_SESSION['USERNAME']=$rs->fields['username'];
                $_SESSION['VERIFIED']=$rs->fields['verified'];
                create_slrememberme();
            }
            else
            {
                destroy_slrememberme($username);
            }
        }
}
4

2 に答える 2

3

この行:-

setcookie ("slrememberme", "", time() - 3600);

過去に期限切れになるように Cookie を設定しています。つまり、既に期限切れになっています。

1年間設定するには、次のことを行う必要があります:-

setcookie("slrememberme", "", time()+60*60*24*30*365);

約1年間設定します。

詳細については、マニュアルを参照してください。

また、この行:-

if (!isset($_SESSION["USERNAME"]) && isset($_COOKIE['slrememberme']))

する必要があります:-

if (isset($_SESSION["USERNAME"]) && isset($_COOKIE['slrememberme']))

という名前の php.ini ファイルにある cookie-expiry 関数を設定する必要があるでしょうsession.cookie_lifetime。31536000 に設定する必要があります。これにより、1 年後に有効期限が切れます。おそらく 0 に設定されています。

于 2012-07-29T20:12:41.950 に答える
0
setcookie('usuario-logado', 'true', (time() + ( 24 * 3600)));
于 2015-08-21T19:03:54.647 に答える