1

Cookieが設定されておらず、設定されたばかりの場合にのみクエリを実行する必要があります。(つまり、ユーザーがページにアクセスするのはこれが初めてです)

私は次のことを試しました:

$cookiename = "item_".$itemid;

if(!isset($_COOKIE[$cookiename])){
    setcookie($cookiename, "viewed", time()+60*60*18);
    $was_set="no";
}

//if it wasn't set and now it is
if(isset($_COOKIE[$cookiename]) and $was_set=="no") {
    mysql_query("UPDATE items_details SET views=views+1 where iid=$itemid");
    echo "<!-- +1 view -->";
}
else {
    echo "<!-- +0 views -->";
}

最初の部分はうまく機能し、そうでない場合はCookieが設定されますが、2番目の部分は機能せず、常に+0ビューを返します

Cookieが6行上に設定されている場合でも、isset($_COOKIE[$cookiename])式は常にfalseを返します。

4

2 に答える 2

2

setcookie()応答Set-Cookie:にヘッダーを追加します。

$_COOKIEブラウザがリクエストで送信するCookieが含まれています。

使用setcookie()しても$_COOKIEにすぐには影響しませんが、次にページをロードしたときに$_COOKIE、ブラウザがリクエストでCookieデータを送信したため、値が適用されます。

同じリクエストでsetcookieを使用した後、$ _ COOKIEの値をチェックしないように、コードを少しリファクタリングする必要があります。

于 2013-03-10T17:27:22.627 に答える
0

setcookieは、クライアントに送信されるヘッダーのみを設定します。$_COOKIEスーパーグローバルは変更されません。一方、$ _ COOKIEは、クライアントから送信されたCookieでいっぱいになります。したがって、最初のステップでは、setcookieを使用してCookieを設定しますが、クライアントがまだ送信していないため、$ _ COOKIEには何もありません。これは、次のリクエストでのみ送信されます。したがって、Cookieが_COOKIEスーパーグローバルですぐに利用できないのは正常です。

于 2013-03-10T17:30:36.017 に答える