0

ポップアップ ウィンドウのタイミングを制御する php スクリプトを作成しました。ポップアップして 60 秒に 1 回だけ表示したい。スクリプトは、ユーザーが最初にページにアクセスしたときに Cookie を設定し、それ以降のアクセスでは Cookie をチェックし、Cookie の有効期限が切れている場合にのみポップアップをアクティブにします。ポップアップは、変数 $_SESSION['activate_popup'] によって制御されます。

スクリプトは、ユーザーが初めてページにアクセスしたときを除いて、すべての場合に意図したとおりに機能します。Cookie は空であるため、条件 1 で Cookie を設定し、ポップアップをアクティブにする必要があります。代わりに、条件 1 で Cookie を設定し、条件 2 で出力を表示します。

$GLOBALS['popup_output'] .= '<!-- begin popup -->';
$domain = 'brocktonvilla.com';
$expiration = time() + 60;
$time_until_expires = $_COOKIE['rc_popuup2'] - time();
$GLOBALS['popup_output'] .= '<!-- time until expires: ' . $time_until_expires . ' sec -->';

/* 1 */     if ( empty($_COOKIE['rc_popuup2']) ) {                                      // if cookie has not been set
                setcookie('rc_popuup2', $expiration, $expiration, '/', $domain );       // set cookie with value of cookie equals expiration time
                $_SESSION['activate_popup'] = 'yes';                                    // activate the popup
                $GLOBALS['popup_output'] .= '<!-- cookie empty => show popup & set cookie -->';             
            }       
/* 2 */     elseif ( $_COOKIE['rc_popuup2'] > time() ) {                                // cookie has been set and cookie expiration is greater than current time
                $_SESSION['activate_popup'] = 'no';                                     // do not activate popup
                $GLOBALS['popup_output'] .= '<!-- cookie set and not expired => do not show popup -->';
            }
/* 3 */     elseif ( $_COOKIE['rc_popuup2'] < time() ) {                                // cookie has been set and cookie expiration is less than current time
                $_SESSION['activate_popup'] = 'yes';                                    // activate the popup
                setcookie('rc_popuup2', $expiration, $expiration, '/', $domain );       // reset cookie with value of cookie equals expiration time
                $GLOBALS['popup_output'] .= '<!-- cookie set but has expired => show popup & reset cookie -->';
            }

スクリプトの動作はhttp://www.brocktonvilla.com/で確認できます。ソース コード「begin popup」を検索すると、Cookie が条件 1 で設定されており、最初にページにアクセスしたときに条件 2 で出力が表示されることがわかります。

4

2 に答える 2

0

上記の問題は、PHP が 2 回実行されたことが原因であることが判明しました。1 回目は、ユーザーが最初にページの非 www バージョンにアクセスしたときで、2 回目は www バージョンへのリダイレクトでした。

スクリプトは (あり得ないことに) if ステートメントと else ステートメントの両方を実行しているように見えましたが、代わりに、最初のパスで Cookie が設定されていなかったため、Cookie が設定され (条件 1)、次に 2 番目のパスで発生していました。 Cookie が既に設定されており、有効期限が切れていないことが読み取られました (条件 2)。これは、スクリプトが、Cookie が設定されてから出力が生成されるまでに 1 ~ 3 秒経過したことを出力する理由を説明しています。これは、ユーザー Relentless によって提供された試みられた解決策に対する私のコメントに見られます。

PHP スクリプトが 2 回実行されるのを防ぐには、次のようにラップします。

$domain = $_SERVER['SERVER_NAME'];                                                      
$needle = 'www.';
$pos = strpos($domain, $needle);
if( $pos !== false ) { 
        // your script here     
}       

このスクリプトは、 http://domain.comのすべてのサーバー クエリをhttp://www.domain.comにリダイレクトすることを前提としています。代わりに非 www にリダイレクトする場合は、条件から感嘆符を削除します ($pos !== false)。

于 2012-10-27T21:31:49.220 に答える
0

これを試して:

$completed = false;
/* 1 */     if ( empty($_COOKIE['rc_popuup2']) ) {                                      // if cookie has not been set
                setcookie('rc_popuup2', $expiration, $expiration, '/', $domain );       // set cookie with value of cookie equals expiration time
                $_SESSION['activate_popup'] = 'yes';                                    // activate the popup
                $GLOBALS['popup_output'] .= '<!-- cookie empty => show popup & set cookie -->';             
            $completed = true;
            }       
/* 2 */     elseif (( $_COOKIE['rc_popuup2'] > time() ) && ($completed == false)) {                                // cookie has been set and cookie expiration is greater than current time
                $_SESSION['activate_popup'] = 'no';                                     // do not activate popup
                $GLOBALS['popup_output'] .= '<!-- cookie set and not expired => do not show popup -->';
             $completed = true;
            }
/* 3 */     elseif (( $_COOKIE['rc_popuup2'] < time() )  && ($completed == false)) {                                // cookie has been set and cookie expiration is less than current time
                $_SESSION['activate_popup'] = 'yes';                                    // activate the popup
                setcookie('rc_popuup2', $expiration, $expiration, '/', $domain );       // reset cookie with value of cookie equals expiration time
                $GLOBALS['popup_output'] .= '<!-- cookie set but has expired => show popup & reset cookie -->';
            }
于 2012-10-26T20:04:47.160 に答える