2013-05-15 64 views
4

我需要关于我的登录系统的帮助。在我的项目中,当用户登录时,他们只需进入他们的帐户。如果他们浏览一些页面并要求登录,那么他们应该在登录后重定向到该页面,而不是他们的个人资料页面。重定向到登录后请求的最后一页

这是我尝试这个代码,但用户总是重定向到student_account.php而不是请求的页面。

$fetch = mysql_fetch_assoc($exec); 
     $_SESSION['login'] = $fetch[uniq]; 
      $_SESSION['emailid'] = $fetch['email']; 
      $emailid = $_SESSION['emailid']; 

     $_SESSION['type'] = 'student'; 
     if(isset($_SESSION['url'])) 
    $url = $_SESSION['url']; // holds url for last page visited. 
else 
    $url = "student_account.php"; // default page for 

header("Location:$url"); 
+0

你在哪里上的所有网页的顶部或在header.php中 – Anigel

+0

看看你已经设置了它。 – Dinesh

+0

尝试呼应了会议[“链接”]设置$ _SESSION [“网址”] – Anigel

回答

6

我想你应该尝试HTTP_REFERER这里重定向最后访问的网页。为此在您的登录表单中设置了一个隐藏字段。

HTML: -

<input type="hidden" name="redirurl" value="<? echo $_SERVER['HTTP_REFERER']; ?>" /> 

并获得形式后redirurl值。

PHP: -

if(isset($_REQUEST['redirurl'])) 
    $url = $_REQUEST['redirurl']; // holds url for last page visited. 
else 
    $url = "student_account.php"; // default page for 

header("Location:$url"); 

或者,如果你正在使用的会话,那么请确保您在该页面上启动会话session_start()。否则会话会中断,并且无法保存您想要的网址。

+1

这将始终重定向到登录表单页面,对不对?只是来自文档的信息:“这是由用户代理设置的,不是所有的用户代理都会设置它,有些提供修改HTTP_REFERER作为功能的能力,简而言之,它不能真正被信任。” – Yann39

0

,而不是代码:

if(isset($_SESSION['url'])) 
    $url = $_SESSION['url']; // holds url for last page visited. 
else 
    $url = "student_account.php"; // default page for 

header("Location:$url"); 

使用下面的代码:

$url = ''; 
if(isset($_SESSION['url'])) 
    $url = $_SESSION['url']; // holds url for last page visited. 
else 
    $url = "student_account.php"; // default page for 

header("Location:".$url); 
+2

好....它有什么不同? – itachi

+0

什么............... – Dinesh

+1

原因初始化变量是好的做法 – DarkBee

9

您可以将此代码粘贴到您网站上的所有网页:

<?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"); 
+0

也可能是必要的只做分配上'GET'请求 – Orangepill

0

确保您将“刷新”页面信息在第二个花括号之后。下面是一个例子

<?php 
ob_start(); 

if(isset($_POST['submit'])){ 
    $to= " email address"; 
    $email = $_POST["email"]; 
    $subject=$_POST["subject"]; 
    $txt =$_POST["message"]; 
    $email = $_POST["email"]; 
    $headers= "From: {$email}" . "\r\n". 
    "CC:email address"; 
    mail($to,$subject,$txt,$headers); 
}  

header("Location: http://example.com/$url"); 
?> 
+1

请完成与代码示例您的答案。 –

0
// check if session is expired 
if (session_status() != PHP_SESSION_ACTIVE) { 
    // redirect to the login page 
    header("Location: yourLogin.php?redirect=" . urlencode($_SERVER['REQUEST_URI'])); 
    exit(); 
} 
// after successful login into yourLogin.php redirect 
if(!($redirect = urldecode($_GET['redirect']))) { 
    // set default URI if don’t have to redirect 
    $redirect = 'yourDefault.php'; 
} 
header("Location: $redirect"); 
exit();