我在PHP中工作。我想在登录后将页面重定向到我要访问的最后一个页面,但是我仍在5小时内堆放在这里,但我仍然没有做到。这是架构,我有3个php文件。
newest.php (before login), signin.php (before login), thread.php (after login).
我正在使用Cookie进行重定向。首先,我去了newest.php,然后我单击了按钮(转到thread.php)。然后thread.php看到您尚未登录,然后重定向到signin.php。在我填写登录表单之后,我单击了提交按钮(signin.php),然后即使登录后我仍在signin.php堆栈(不在任何地方),它应该转到thread.php自动。
这是我在newest.php和thread.php中的代码(不在signin.php中):
$coopage='coopage'; $current_page='http://'.$_SERVER[HTTP_HOST].$_SERVER[REQUEST_URI]; setcookie($coopage, $current_page,time()+86400,'/');
在newest.php中提交按钮(进入thread.php):
echo "<center><button onclick=\"window.location='/thread/form'\">add new thread</button></center>";
在signin.php中(在我单击“提交”按钮后或在提交区域中,因为表单和提交后,我在同一页面中进行了创建)(在页面底部):
if(isset($_COOKIE[$coopage])){ $url=$_COOKIE[$coopage]; unset($_COOKIE[$coopage]); header('location:'.$url); }
注意:在signin.php中,我在此cookie之前还设置了另一个cookie,这是此原因吗?还是在一页中设置2个Cookie无关紧要?另一个cookie设置是这样的(在页面顶部)
$cooval2='juna'; setcookie($coousername, $cooval2, time() + (3600 * 24 * 365), "/"); // 1 year
我根本不会使用Cookie。
方法1
一种可能的方法是将访问的链接存储到会话变量中,然后当用户到达login.php页面时,提供标题重定向到会话变量给定的$ url。
将此代码粘贴到网站或主容器上的所有页面中。
<?php session_start(); $_SESSION['url'] = $_SERVER['REQUEST_URI'];
对于登录页面,您可以:
<?php session_start(); // needed for sessions. if(isset($_SESSION['url'])) $url = $_SESSION['url']; // holds url for last page visited. else $url = "student_account.php"; header("Location: http://example.com/$url");
方法2
到目前为止,一个更简单的解决方案就是:
<hidden name="redirurl" value="<? echo $_SERVER['HTTP_REFERER']; ?>" />
他们登录后,然后重定向到该地址。
但是,这仅在每个页面上都有一个登录框的情况下才是好的。
$_SERVER['REQUEST_URI']只会保留当前页面。您要做的就是使用$_SERVER['HTTP_REFERER']。因此,请将HTTP_REFERER保存在表单上的隐藏元素中,但还要注意在处理表单的PHP中,您将需要一些逻辑,如果登录失败,该逻辑将重定向回登录页面,同时还要检查引荐来源是否确实是您的网站(如果不是),则重定向回首页。
$_SERVER['REQUEST_URI']
$_SERVER['HTTP_REFERER']
方法3
另一个常用的方法是通过$ _GET变量将用户的当前页面传递到Login表单。
更改脚本,这样还可以告诉登录页面记住您的位置:
注意: $ _SERVER [‘REQUEST_URI’] 是您的当前页面
header("Location:login.php?location=" . urlencode($_SERVER['REQUEST_URI']));
现在检查是否已填充,然后将用户发送至此:login.php
echo '<input type="hidden" name="location" value="'; if(isset($_GET['location'])) { echo htmlspecialchars($_GET['location']); } echo '" />'; // Will show something like this: // <input type="hidden" name="location" value="previousPage.php" />
登录check.php
session_start(); // our url is now stored as $_POST['location'] (posted from login.php). If it's blank, let's ignore it. Otherwise, let's do something with it. $redirect = NULL; if($_POST['location'] != '') { $redirect = $_POST['location']; } if((empty($username) OR empty($password) AND !isset($_SESSION['id_login']))) { $url = 'login.php?p=1'; // if we have a redirect URL, pass it back to login.php so we don't forget it if(isset($redirect)) { $url .= '&location=' . urlencode($redirect); } header("Location: " . $url); exit(); } elseif (!user_exists($username,$password) AND !isset($_SESSION['id_login'])) { $url = 'login.php?p=2'; if(isset($redirect)) { $url .= '&location=' . urlencode($redirect); } header("Location:" . $url); exit(); } elseif(isset($_SESSION['id_login'])) { // if login is successful and there is a redirect address, send the user directly there if($redirect)) { header("Location:". $redirect); } else { header("Location:login.php?p=3"); } exit(); }