document.referrer给出的值不正确

时间:2014-06-04 14:39:35

标签: javascript

我使用document.referrer查看用户是否在我的应用程序中添加了新消息。显示消息的页面称为“messages.php”,处理添加消息的脚本称为“add_message.php”。

我想在最后添加的消息上创建一个效果,但前提是用户刚刚添加了消息。要查看最后一条消息是否刚刚添加并且之前没有,我需要查看用户上次访问的页面是否为“add_message.php”。

这是我用来检测上次访问过的URL的代码,用if语句检查是否是这种情况:

var prevURL = document.referrer;
var newMessageURL = 'add_message.php';
if(prevURL.indexOf(newMessageURL) > -1) {
    alert(prevURL);
}   

问题在于,当我添加消息时,脚本'add_message.php'被调用(通过表单操作),但是,document.referrer返回'messages.php'作为最后访问过的页面,但它应该是' add_message.php',因为这是我在添加新邮件时回来的地方。

如何在添加消息时让document.referrer返回'add_message.php'?

在'add_message.php'中我使用

header('Location: ' . $_SERVER['HTTP_REFERER']);

这会导致问题吗?

1 个答案:

答案 0 :(得分:1)

推荐人充其量是不可靠的,特别是因为浏览器可以选择欺骗或完全隐藏它。在这种情况下,因为它是一个重定向,所以"在...之间"页面不会被计为您访问的最后一页。

那就是说,既然你正在使用PHP,那还有另一种方式:

作为add_message.php文件的一部分,请添加以下内容:

// assuming you already have session_start() somewhere above
$_SESSION['just_added_a_message'] = true;

然后,在您拥有JavaScript的地方,将其替换为PHP:

<?php
if( !empty($_SESSION['just_added_a_message'])) {
    ?>
    <script>alert("Ohai there!");</script>
    <?php
    unset($_SESSION['just_added_a_message']);
}
?>

我自己使用这种技术来显示确认信息&#34;你发送了一条个人信息给X&#34;发送后用户被重定向回收件箱时的消息。