使用PHP和Javascript重定向并设置cookie

使用PHP和Javascript重定向并设置cookie,php,javascript,redirect,Php,Javascript,Redirect,好吧,我会尽量保持这个简单和甜蜜。我正在我的wesbsite上工作,当用户第一次加载站点时,它当前会加载一个启动页面。这就是我想要的行为 如果用户以前从未访问过该站点,请重定向到初始页面 如果用户以前访问过该站点并且不想看到飞溅,请不要重定向 若用户喜欢splash并希望在新会话中查看,请显示splash页面 这些基本上都是我正在处理的场景,真的想不出更多了,在过去的几个小时里,我一直在尝试破解一些东西,但没有运气 index.php <?php setcookie("visit", "t

好吧,我会尽量保持这个简单和甜蜜。我正在我的wesbsite上工作,当用户第一次加载站点时,它当前会加载一个启动页面。这就是我想要的行为

  • 如果用户以前从未访问过该站点,请重定向到初始页面
  • 如果用户以前访问过该站点并且不想看到飞溅,请不要重定向
  • 若用户喜欢splash并希望在新会话中查看,请显示splash页面
  • 这些基本上都是我正在处理的场景,真的想不出更多了,在过去的几个小时里,我一直在尝试破解一些东西,但没有运气

    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);
    
    
    
    
    ?>
    
    <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 
    
        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>";
    
        ?>
    
    尝试以下操作:

    <?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>
    
    
    闪屏
    
    闪屏
    



    好吧,所以我认为问题不在于我的代码,而在于理解浏览器的行为。如果我现在在FF 18.0.2中访问该网站(chrisrjones.com),并在splash pages上选择“No”是愚蠢的,那么我可以在单击enter后进入该网站

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

    另一方面,浏览器关闭后,Chrome似乎不会删除会话cookie,这就是为什么我在使用Chrome时遇到如此大的困难


    我现在更好地理解了为什么事情会这样,并意识到这并不全是我糟糕的编码实践。

    出了什么问题?什么需要修改?请提供更多信息。另存为
    test.php
    ,看看它是否达到了您的目的。您可能需要编辑硬编码的
    /index2.html
    ,才能转到第二页。