我试图编写一个函数,在用户尝试访问索引(主页)页面时将用户重定向到他们的个人资料页面。我已经能够使用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以及关于个人资料网址的其他一切正常。只是这个重定向正在推动我今天的墙。谢谢!
答案 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;
}