每日重定向用户

时间:2016-05-08 23:08:10

标签: php html

我正在尝试重定向用户,如果这是他们第一次访问那天。 我发现了这个:Show different page if first time visit

我试过了:     

if (!isset($_COOKIE['visited'])) { // no cookie, so probably the first time here
    setcookie ('visited', 'yes', time() + 3600); // set visited cookie

    header("Location: http://example.com/index.php");
    exit(); // always use exit after redirect to prevent further loading of the page
}

?>

我也尝试过:     

session_start();

if (!isset($_SESSION['FirstVisit'])) {

//show site for the first time part
$_SESSION['FirstVisit] = 1;
header("Location: http://example.com/index.php");

// Don't forget to add http colon slash slash www dot before!

} else { Show normal site }

?>

这对我不起作用。我已将此代码粘贴到我的HTML网页中,并更新了链接以便为我的项目工作。该页面什么都不做,我想弄明白为什么。

目标是在我的网站上添加一个motd,每天一次将用户重定向到一个motd页面。在motd页面上会有一个历史记录后退按钮,让他们到达他们首先去的地方。我不做javascript或php,更不用说cookie,所以任何帮助都是值得赞赏的。

1 个答案:

答案 0 :(得分:2)

信息

所需结果的完整规格尚不清楚,但对于国际使用,我建议如下:

  • 您需要用户的时区,因此使用JavaScript就足够了
  • 每个"着陆页"对于用户请求,应加载此JavaScript,该JavaScript可以设置cookie(如果未设置) - 用户当前时间。
  • 如果设置了cookie,那么JavaScript应该读取cookie数据并将文本解析为日期/时间并计算它是否是"第二天"对于该特定用户
  • 您需要考虑在欧洲/法国使用Cookie政策,并告知用户使用Cookie来改善用户体验。

为了为每个页面加载此特定脚本,它可能会变得非常复杂,具体取决于服务器端处理的设置方式。

如果您只需要1个特定URL(页面),那么就像在该页面的HTML中添加此脚本一样简单。

我没有足够的信息来了解您的要求是什么 - 或者您的服务器设置如何运作,但这里是整个9码:

答案

以下代码段假设如下:

  • 你有一个典型的" LAMP堆栈"安装在托管服务器上
  • 您的Apache配置"允许目录覆盖" (包含.htaccess个文件)
  • 您的Apache设置已安装并启用mod_rewrite
  • Apache + PHP具有对您docroot
  • 中创建的所有文件的读取权限
  • 您的PHP版本至少为5.5(或更高)
  • 您的用户启用了JavaScript(默认)

如果您按照以下步骤操作,则可以让它完全按照您的预期运行;只需更改代码并将其放在需要的位置。无论用户访问的页面如何,这都将为您提供适用于每个请求的解决方案。

在您服务器的docroot文件夹中,创建以下文件:

  • .htaccess
  • handler.php
  • cookie.js

<强>的.htaccess
在您喜欢的文本编辑器中打开.htaccess文件,输入以下内容,然后保存:

RewriteEngine On
RewriteCond %{REQUEST_URI} !handler.php$
RewriteRule (.*) handler.php


<强> handler.php
.handler.php文件中键入以下内容,然后保存:

<?

    $over = $_SERVER['SERVER_PROTOCOL'];
    $path = explode('?',$_SERVER['REQUEST_URI']);
    $path = (($path == '/') ? '/home.html');
    $extn = array_shift((explode('.',$path)));
    $list = # array
    [
        'html' => 'text/html',
        'css'  => 'text/css',
        'png'  => 'image/png',
        'js'   => 'application/javascript',
    ];

    $type = (isset($mime[$extn]) ? $mime[$extn] : 'text/plain');

    if (file_exists(".${path}"))
    {
        if (is_dir(".${path}") || ($path == '/.htaccess'))
        {
            header("${over} 403 Forbidden");
            echo "path: `$path` is forbidden";
            exit;
        }

        header("${over} 200 OK");
        header("Content-Type: ${type}");

        if (extn !== 'html')
        {
            header("Content-Length: ".filesize($path));
            readfile($path);
            exit;
        }

        $text = file_get_contents($path);
        $text.= '<script>'.file_get_contents('./cookie.js').'</script>';

        header("Content-Length: ".strlen($text));
        echo $text;
        exit;
    }

    header("${over} 404 Not Found");
    echo "path: `$path` is undefined";
    exit;

?>


<强> cookie.js
.cookie.js文件中键入以下内容,然后保存:

function cookie(name,data,days)
{
    if (data === undefined)
    {
        var prts;

        data = "; " + document.cookie;
        prts = data.split("; " + name + "=");

        if (prts.length == 2)
        { return prts.pop().split(";").shift(); }

        return null;
    }

    if (data)
    {
        var gone = "";
        var date = new Date();

        if (days)
        {
            date = (date.setTime(date.getTime()+(days*24*60*60*1000))).toGMTString();
            gone = "; expires="+date.toGMTString();
        }

        document.cookie = name+"="+data+gone+"; path=/";
        return true;
    }

    if (data === false)
    {
        cookie(name,'',-1);
    }
}

解释

.htaccess文件将所有请求指向handler.php文件 handler.php文件根据请求的路径处理请求。 如果是HTML文档请求,它会提供请求的HTML文档以及可用于管理cookie的JavaScript

cookie功能非常简单:

  • 制作Cookie:cookie('some_name','some_value');
  • 阅读Cookie:cookie('some_name');
  • 删除Cookie:cookie('some_name',false);

结论

通过使用上面的说明和代码示例,您可以获得足够的信息来构建您需要的内容 您需要一个简明的mime类型列表,并且比PHP代码建议的安全性更好,但您可以使用它来开始。

如果您对上述所有问题有任何疑问,请在下面发表评论。