【问题标题】:What's the best way to open last page opened even after browser is closed?即使在浏览器关闭后打开最后打开的页面的最佳方式是什么?
【发布时间】:2016-03-25 15:13:59
【问题描述】:

如果您转到subdirectoryname/index.php,我有此代码会将您重定向到您打开的最后一页。它有效,但我觉得它真的很愚蠢。有没有人对我如何更优雅地实现这一点有更好的想法?

不要将此与 window.history.back() 混淆; 我试图让浏览器记住您打开的最后一页。因此,即使您关闭浏览器。明天再打开网站。 www.example.com 您将被重定向到 www.example.com/lastpageyouopened.php

setCookieLastPage.php

<?php
setcookie(
  'LastPageVisited',
  $_POST['lastpagevisited'],
  time() + 199999999
);
?>

index.php

<?php include_once 'header.php'; ?>

<a href="<?php if(isset($_COOKIE['LastPageVisited'])){echo $_COOKIE['LastPageVisited'];}else{ echo 'defaultpage.php';} ?>"  class="hiddenlink-lastpageopened"></a>


<?php include_once 'footer.php'; ?>

custom.js

if($(location).attr('pathname')  == "/subdirectoryname/" || $(location).attr('pathname') == "/subdirectoryname/index.php"  || $(location).attr('pathname') == "/subdirectoryname/index.php/" )
{
    var lastvisitedpagelink = $('.hiddenlink-lastpageopened').attr('href');
    setTimeout(function(){
    window.location.href = lastvisitedpagelink;
    },300);
}
runSETCookieLastPageVisited(window.location.href);


function runSETCookieLastPageVisited(lastpagevisited)
{

    if($(location).attr('pathname')  != "/subdirectoryname/" || $(location).attr('subdirectoryname') != "/play2win/index.php"  || $(location).attr('subdirectoryname') != "/play2win/index.php/" )
    {
        $.ajax(
            {
               type: "POST",
               url: "setCookieLastPage.php",
               data: {"lastpagevisited":lastpagevisited},
               datatype: "json",
               cache: false,
               success: function(data)
               {
                 //alert(data);
               }
            });
    }
}

注意:我现在正在使用不同网站项目的子目录,因为该项目仍然没有自己的域。当我们将它移动到它自己的域时,将不再有 /subdirectoryname/ 并且 index.php 的路径将只是“index.php”而不是“subdirectoryname/index.php”

【问题讨论】:

  • 我认为这是duplicate
  • @adeneo 我不是在寻找像 window.history.back() 这样的后退按钮,我试图让浏览器记住您打开的最后一页。因此,即使您关闭浏览器。明天再打开网站。 www.example.com 您将被重定向到 www.example.com/lastpageyouopened.php
  • 我认为这个问题需要详细说明。用户打开的最后一页,是当前页,不是吗?
  • @YuriTkachenko 这就是我的代码所做的。但我认为我这样做的方式非常愚蠢。就像我必须一直检查当前位置一样。我在 index.php 中放置了一个隐藏的 ^^;
  • @Teemu 我说如果他/她在 index.php 中,它不会将它保存在 cookie 中:D

标签: javascript php jquery html ajax


【解决方案1】:

您可以在每次页面更改时捕获esc_url($_SERVER['REQUEST_URI']),然后您可以将其放入header( Location... php 调用中。当重新打开浏览器并登录时页面加载 - 包装在:

  $redirect_url_var = http etc from your database

  if( isset( $redirect_url_var)){
  header("Location: $redirect_url_var");
  } 

使用来自php.net/manual/en/function.header.php的代码

确保在header() 之前没有输出,否则会造成混乱 - 将其放在页面顶部的 doctype 之前(假设他们在浏览时登录到您的网站。)

您也许可以从会话 cookie 中获取信息 - 如果您可以使用会话,How can I get $_SESSION data from SESSID? 可能会有所帮助。

如果你把它放到你的web根目录的一个空白php页面中,你可以在“会话”下看到你的php安装中的设置:

 <?php phpinfo(); ?>

您可以弄乱它们的持续时间(以及许多其他 SO 帖子):php.net/manual/en/session.configuration.phphow to keep the session active even if the browser was accidentally close? 这仅适用于一个位置和浏览器,如果用户更改为另一个位置,则不会被拾取机器,例如在工作或家里。

您可能会从 ModRewritehtaccess 大师和用户日志文件中获得一些乐趣 https://serverfault.com/questions/214512/redirect-change-urls-or-redirect-http-to-https-in-apache-everything-you-ever - 可能在带有 IP,URI,Time 的平面 csv 类型文件中(时间是这样,您可以删除 IP已更改。)IP 地址,可以更改 - 例如TalkTalk 经常重置它们,或者当路由器重新启动时它们会发生变化,从而为您留下一个 IP 地址的日志条目,该 IP 地址不再存在,或者至少不再属于该用户。

您可以使用类似 fail2ban 的内容 - 存储 IP 地址 - Fail2ban www.fail2ban.org/wiki/index.php 如果幸运的话,您可能会像 Fail2ban 那样找到访问服务器上日志文件的方法,然后您可以计算出最后一个给定 IP 地址从那里访问的页面 - 无需您自己记录。

可能还有一种方法可以从 awstats cryptome.org/2014/01/awstats-log-spy.pdf 获取用户统计信息

如果过程中不涉及登录,我不确定我是否希望浏览器将其他人带到我在您网站上查看的最后一页,但这取决于您。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-07
    • 1970-01-01
    • 2021-11-21
    • 2022-12-16
    • 1970-01-01
    • 2010-09-06
    相关资源
    最近更新 更多