0

こんにちは、

ユーザーが自分のサイトに複数のアカウントを持っている場合、「last_visit」のような Cookie を設定するにはどうすればよいですか?いくつかの方法を試しましたが失敗しました。

ユーザーがログアウトするときのコードです

setcookie('last_visit',time(),time()+60*60*24*30*12);

ただし、ユーザーが別のアカウントで再ログインすると、ページはこのコードで最初のアカウントの最後の訪問を読み取ります

  $lastvisit = $_COOKIE['last_visit'];

1 つの Cookie で、最終訪問 Cookie をユーザー ID Cookie とリンクできますか?

正しい方法を教えてください

4

2 に答える 2

0

新しい Cookie を作成するときは、既存の Cookie または古い Cookie を削除するようにしてください。相互に排他的なログインを行います。ユーザーが 1 つのアカウントにログインすると、他のアカウントからサインアウトします。

于 2012-06-15T07:37:36.427 に答える
0

2 つのオプション: 1 つは、ユーザー ID と最終アクセスの連想配列を作成し、それを Cookie のコンテンツとしてシリアル化して保存することです。2 番目のオプションは、ユーザーごとに「last_visit_[user_id]」という Cookie を作成することです。最初のものはおそらくより使いやすく、必要なユーザー Cookie が少なくて済みます。


編集 - これは未テストの例です。エラーが発生した場合は申し訳ありませんが、これで要点がわかります。

重要なデータは、$aLastLogged[UserID] = TimeLastLogged; の連想配列に保存されます。

// This will be the user id of hte current user as set somewhere else.
$userID = 123;


// This will store the time the user last logged on. 0 = not logged on
$LastLoggedOn = 0;

// Read the cookie - allow for errors!
$aLastLogged = false;  // Start with "false" and we'll correct later if is works
// Check if cookie exists
if (isset($_COOKIE['last_logged'])) {
    // Read the cookie contents. The @ hides the errors in case the cookie is corrupted
    $aLastLogged = @unserialize($_COOKIE['last_logged']);
}

// At this point, aLastLogged will be an array, or false if it was not set or failed

if ($aLastLogged) {
    // See if this user has been here before by checking if there is an element in the array
    if (isset($aLastLogged[$userID])) {
        $LastLoggedOn = (int)$aLastLogged[$userID];
        // Note - I cast as "int" to check it's a valid number. You could alos check hte range is valid - just in case someone's been fiddlign with the cookie. Trust no input, ever, including cookies
    }
} else {
    // Create a blank array for the cookie
    $aLastLogged = array();
}


// At this point, you have the time in $LastLoggedOn

// Now update the cookie by creating / updating hte associative element
$aLastLogged[$user_ID] = time();
// Set the cookie; set the time and path and domain as required - the following is for 1 day - you'll want longer.
setcookie('last_logged', serialize($aLastLogged), time() + 86400, '/');  
于 2012-06-15T07:38:28.530 に答える