php重定向使用会话数据

时间:2013-08-20 20:48:30

标签: php redirect session-variables

我试图编写一个函数,在用户尝试访问索引(主页)页面时将用户重定向到他们的个人资料页面。我已经能够使用POST数据从登录表单成功完成此操作,但是以这种方式拉取会话数据时遇到问题。 Firefox表示服务器的重定向方式永远不会完成。

这就是我尝试过的,正如我的一般功能中所写的那样:

function logged_in_redirect() {
if (logged_in() === true) {
    header('Location: '.$_SESSION['username'].'');
  //header('Location: '.$user_data['username'].'');   *NEITHER LINE WORKS
    exit();
}
}

和我添加重定向的索引页面:

    <?php 
    include 'core/init.php';
    logged_in_redirect();
    include 'includes/overall/header.php'; 
    ?>        
    <h1>Home</h1>
    <p>Just a template.</p>

    <?php include 'includes/overall/footer.php'; ?>

并且我的初学者包括:

    <?php
    ob_start();
    session_start();
    //error_reporting(0);

    require 'database/connect.php';
    require 'functions/general.php';
    require 'functions/users.php';

    if (logged_in() === true) {
        $session_user_id = $_SESSION['user_id'];
        $user_data = user_data($db, $session_user_id, 'user_id', 'username', 'password', 'first_name', 'last_name', 'email', 'stack_code');
        if (user_active($db, $user_data['username']) === false) {
          session_destroy();
          header('Location: index.php');
          exit();
        }
    }

    $errors = array();
    ?>

iv修改了我的.htaccess以及关于个人资料网址的其他一切正常。只是这个重定向正在推动我今天的墙。谢谢!

2 个答案:

答案 0 :(得分:0)

好的简单,我只需要通过重定向功能在我的init中传递$ user_data变量,当我调用该函数时:

function logged_in_redirect($user_data) {
if (logged_in() === true) {
    header('Location: '.$user_data['username'].''); 
    exit();
}

}

答案 1 :(得分:0)

如果是将用户移动到配置文件页面的索引页面,则必须检查所访问的页面。像这样:

$page = isset($_POST['page']) ? clear_get_tag($_POST['page']) : NULL;
        $session_user_id = $_SESSION['user_id'];
        $user_data = user_data($db, $session_user_id, 'user_id', 'username', 'password', 'first_name', 'last_name', 'email', 'stack_code');
switch($page){

case 'index':
case NULL:
if (logged_in() === true && !is_null($user_data) ) {
//call the redirect function here if the user is logged
}else{
// echo the index page
}
break;

case 'user':
echo 'user profile';
break;

default:
// Check if something else was called rather than defined pages, and returns the page depend on if the user is logged in.
if (logged_in() === true) {
header('Location: '.$user_data['username'].''); 
}else{
header('Location: index.php');
}
break;

}