在用户登录或在论坛中创建新帖子后,我已经阅读了一些关于如何重定向到上一个浏览页面的stackoverflow超链接。我发现大多数答案提到了使用AJAX
或javascript
之类的问题,因为大多数答案者认为它应该只发生在客户端。此外,他们提供的大多数代码都有助于建议您在登录后如何重定向到某些页面,例如 index.php 。
对我来说,我现在真正想做的是如何使用提交按钮后重定向到以前的浏览/访问过的网页 > PHP (请忘记现在关于AJAX或JAVASCRIPT)。我不将用户重定向到任何特定的已分配页面,但直接转到之前的页面。例如,用户访问index.php
,然后点击其上的超链接转到posts.php
页面查看新帖子,然后他对论坛感兴趣,然后转到{{例如,来自login.php
的1}页面登录,以便他可以回复帖子,如果他想要或做其他事情。在这种情况下,在他登录后,论坛将http://domain.com/posts.php?qid=7
,即*REDIRECT* him to the immediately previous posts.php page
。这就是我现在要编写的代码。
这就是我刚创建的功能:
http://domain.com/posts.php?qid=7
我所要做的就是在我想要的 function str_url($a, $b) {
return substr($a, 0, strpos($a, $b));
}
function self_url() {
if(!isset($_SERVER['REQUEST_URI'])) {
$self = $_SERVER['PHP_SELF'];
}else{
$self = $_SERVER['REQUEST_URI'];
}
$secure = empty($_SERVER["HTTPS"]) ? '' : ($_SERVER["HTTPS"] == "on") ? "s":"";
$protocol_secure = str_url(strtolower($_SERVER["SERVER_PROTOCOL"]), "/").$secure;
$port = ($_SERVER["SERVER_PORT"] == "80") ? "" : (":".$_SERVER["SERVER_PORT"]);
$_SESSION['previous'] = $protocol_secure."://".$_SERVER['SERVER_NAME'].$port.$self;
header("Location: " . $_SESSION['previous']);
}
条件之后将函数放在文档的头部和self_url();
的PHP代码中的任何位置。
问题是函数form checking and submission
只检查self_url();
以将登录用户重定向到(它截断URL的其余部分),但不是以前访问过的网页的整个长网址,例如domain.com/posts.php
(其中http://domain.com/posts.php?qid=7
是某个帖子的id=7
对),他刚刚登录前就访问了该网址。
你能帮我理清原因吗?或者如果你有任何方便的PHP函数来取代我的,我会很感激。
答案 0 :(得分:1)
您可以通过$_SERVER['HTTP_REFERER']
向您看到之前的网址 ,因此您可以将其作为重定向目标。但这不是很可靠 - 来自docs:
' HTTP_REFERER'
将用户代理引用到当前页面的页面地址(如果有)。这是由用户代理设置的。 并非所有用户代理 将设置此,有些提供修改HTTP_REFERER的能力 一项功能。简而言之,它无法真正被信任。
更好的方法是让前一个脚本插入自身的GET参数,以便重定向脚本知道用户之前的位置。
好吧,你可以将每个访问过的页面存储一个cookie或会话,然后从那里读取它,但在我看来这并没有多大意义。
//编辑一些代码:
if(!isset($_SERVER['REQUEST_URI'])) {
$self = $_SERVER['PHP_SELF'];
}else{
$self = $_SERVER['REQUEST_URI'];
}
只需将?redir=$self
附加到表单的操作中即可。