0

わかりました、私はこれをシンプルで甘いものにしようとします. 私は自分の Web サイトで作業していますが、現在、ユーザーが最初にサイトを読み込んだときにスプラッシュ ページが読み込まれます。それが私が望む行動です。

  1. ユーザーが以前にサイトにアクセスしたことがない場合は、スプラッシュ ページにリダイレクトします。
  2. ユーザーが以前にサイトにアクセスしたことがあり、スプラッシュを見たくない場合は、リダイレクトしないでください。
  3. ユーザーがスプラッシュを好み、新しいセッションで見たい場合は、スプラッシュ ページを表示します。

これらは基本的に私が取り組んでいるシナリオであり、これ以上考えることはできません。過去数時間、何かをハックしようとして運が悪かったのです。

index.php

<?php
setcookie("visit", "true", mktime (0, 0, 0, 12, 31, 2014), "/"); // delete cookie on 31DEC14

$cookie_splash = $_COOKIE['splash'];
$cookie_visit = $_COOKIE['visit'];
$cookie_visit_now = $_COOKIE['visit_now'];

do {

    if ($cookie_splash == '' && $cookie_visit == '' && $cookie_visit_now == '') {
        /*
        echo "<script type = text/javascript>";
        echo "window.location = 'http://chrisrjones.com/splash.php'";
        echo "</script>";
        */
        header('Location: splash.php');
    }

    if ( $cookie_splash == 'false' && $cookie_visit_now == 'true') {
    break;
    }

    if ( $cookie_splash == 'true' && $cookie_visit_now == 'false') {
        /*
        echo "<script type = text/javascript>";
        echo "window.location = 'http://chrisrjones.com/splash.php'";
        echo "</script>";
        */
        header('Location: splash.php');
    }

    if ( $cookie_splash == 'true' && $cookie_visit == 'true' && $cookie_visit_now == "false") {
        /*
        echo "<script type = text/javascript>";
        echo "window.location = 'http://chrisrjones.com/splash.php'";
        echo "</script>";
        */
        header('Location: splash.php');
    }

    if ($cookie_splash == 'true' && $cookie_visit == 'true' && $cookie_visit_now == 'true') {
        break;
    }
}
while (0);




?>

スプラッシュ.php

<p>
    <form name="tosplashornottosplash" action="scripts/splash-process.php" method="post" onSubmit="return valForm()">
    Splash pages are stupid.

    <input type="radio" name="splash" id="splash_false" value="false" /> No
    <input type="radio" name="splash" id="splash_true" value="true" /> Yes

    <input type="submit" name="splashSubmit" onClick="return valForm(tosplashornottosplash)" value="Enter" />
    </form>
    </p>

スプラッシュ-process.php

    <?php 

    setcookie("visit", "true", mktime (0, 0, 0, 12, 31, 2014), "/"); // delete cookie on 31DEC14
    setcookie("visit_now", "true", NULL, '/'); // cookie should expire / delete at end of session.


    $splashvar = $_POST["splash"];

    if ( $splashvar == "false" ) {
        // create cookie - splash 1
        setcookie("splash", "true", time()+3600, '/'); // expires in one hour
    }
        else {
            // create cookie - splash 0
            setcookie("splash", "false", time()+3600, '/'); // expires in one hour
        }

    echo "<script type = text/javascript>";
    echo "window.location = 'http://chrisrjones.com/index.php'";
    echo "</script>";

    ?>

chrisrjones.com にアクセスして、私が話している内容を確認してください。

4

2 に答える 2

0

了解しました。問題は私のコードにあるのではなく、ブラウザの動作を理解していることにあると思います。現在FF18.0.2のサイト(chrisrjones.com)にアクセスし、スプラッシュページで[いいえ]を選択すると、バカになります。[Enter]をクリックするとサイトにアクセスできます。

ただし、タブを開いたままにし、再起動時にタブを開いたままにするようにFFを設定し(名前が何であれ、意味がわかります)、FFを終了してから再起動すると、セッションCookieが期限切れになることはありません。したがって、ページを更新すると、スプラッシュページが読み込まれません。ただし、タブを閉じてブラウザを終了し、ページをリロードすると、スプラッシュページが読み込まれます。(これが私が欲しいものです)。

一方、Chromeは、ブラウザを閉じるとセッションCookieを削除しないように見えるため、Chromeでこのような問題が発生していました。

私は今、物事がそのように振る舞っている理由をよりよく理解し、それが私の貧弱なコーディング慣行のすべてではなかったことに気づきました。

于 2013-02-10T00:15:43.197 に答える
0

次のことを試してください。

<?php
if (($_GET['nosplash'] == '1') || ($_COOKIE['nosplash'] == '1')) {
    setcookie('nosplash','1',strtotime('+1 year'),'/');
    header('Location: http://'.$_SERVER['HTTP_HOST'].'/index2.html');
    exit;
}

?><html>
<head>
<title>Splash screen</title>
</head>
<p>
Splash screen
</p>
<p>
<a href="/index2.html">continue (and show splash screen on next visit)</a><br />
<a href="<?=$_SERVER['SCRIPT_NAME']?>?nosplash=1">continue and don't show the splash again</a>
</p>
</html>
于 2013-02-09T02:48:39.743 に答える