0

好吧,我会尽量保持这个简单和甜蜜。我正在开发我的网站,当用户首次加载网站时,它当前会加载启动页面。这就是我想要的行为。

  1. 如果用户以前从未访问过该站点,则重定向到启动页面。
  2. 如果用户之前访问过该站点并且不想看到启动画面,请不要重定向。
  3. 如果用户喜欢启动画面并希望在新会话中看到,则显示启动画面。

那些基本上是我正在使用的场景,真的想不出更多了,在过去的几个小时里一直试图破解一些东西,但没有运气。

索引.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>

飞溅过程.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

尝试以下操作:

<?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 回答
0

好吧,所以我认为问题不在于我的代码,而在于了解浏览器的行为方式。如果我现在在 FF 18.0.2 中访问该站点 (chrisrjones.com) 并在启动页面上选择“否”是愚蠢的,那么我可以在单击 Enter 后进入该站点。

但是,如果我让标签保持打开状态,并将 FF 设置为在重新启动时保持标签打开(不管它叫什么,你知道我的意思),然后退出 FF,然后重新启动它,会话 cookie 永不过期。因此,当我刷新页面时,不会加载启动页面。但是,如果我关闭选项卡然后退出浏览器然后重新加载页面,则会加载启动页面。(这就是我想要的)。

另一方面,一旦浏览器关闭,Chrome 似乎不会删除会话 cookie,所以这就是我在使用 Chrome 时遇到如此困难的原因。

我现在对为什么事情会这样表现有了更好的理解,并意识到这并不是我糟糕的编码习惯。

于 2013-02-10T00:15:43.197 回答