2013-02-09 75 views
0

好吧,我会尽量保持这种简单和甜蜜。我正在使用我的wesbsite,并且当用户第一次加载站点时,它当前加载了一个启动页面。这是我想要的行为。使用PHP和Javascript重定向并设置Cookie

  1. 如果用户以前从未去过网站,则重定向到splash页面。
  2. 如果用户以前曾经访问过该网站,并且不想看到这个splash不重定向。
  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); 




?> 

splash.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>"; 

    ?> 

转到chrisr jones.com看看我在说什么。

+0

怎么回事?需要修改哪些内容?请多一点信息。 – 2013-02-09 02:37:57

回答

0

好了,所以我觉得这个问题是不是我的代码,而是了解浏览器的行为。如果我现在在FF 18.0.2中访问网站(chrisrjones.com),并在启动页面上选择“否”,那么我可以在点击输入后进入网站。

但是,如果我将该选项卡打开,并且设置了FF以在重新启动时将标签打开(无论它被称为您知道我的意思),并退出FF,然后重新启动会话cookie永不过期。所以,当我刷新页面,因此没有加载启动页面。但是,如果我关闭该选项卡,然后退出浏览器然后重新加载页面,则加载启动页面。 (这是我想要的)。

另一方面,Chrome在浏览器关闭后似乎不会删除会话cookie,所以这就是为什么我在Chrome上遇到这种困难。

我现在已经有了一个更好的理解,为什么事情的行为方式是这样的,并且意识到这不是我所有的糟糕的编码习惯。

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> 
+0

我想将这个PHP代码添加到splash.php页面? – Chris 2013-02-09 02:59:20

+0

保存为'test.php',看看它是否做到了你想要的。您可能需要编辑硬编码的'/ index2.html'才能进入第二页。 – Tigger 2013-02-09 03:41:16