我正在尝试检查天气或用户是否已登录,如果没有登录,则将用户重定向到登录页面。
这是项目结构:
这是index.php:
<?php
include("controller/loginFuncs.php");
checkLogin();
?>
<!DOCTYPE html>
<html>
[HTML CODE HERE]
</html>
这是loginFuncs.php:
<?php
function checkLogin() {
if (!isset($_SESSION['username'])) {
echo "Calling logout";
logout();
}
}
function logout() {
unset($_SESSION['username'], $_SESSION['fname'], $_SESSION['lname'], $_SESSION['role']);
include("../views/login.php");
}
在函数logout()
中,我也尝试使用header("Location: ../views/login.php");
,但是,似乎标头仅用于完整的url,并且由于该项目正在开发中,所以我没有该url,也不会可以在其中硬编码URL,因为域名可能会更改,然后我必须更改代码。我正在寻找在项目结构中使用文件相对路径的解决方案,例如include但include由于某些原因无法正常工作。
如果我加载index.php,则会收到“呼叫注销”消息,但实际上并未包含login.php。产生的页面网址为http://localhost:63342/stm_asc/index.php?_ijt=st357j0vorq8hq8719sq87qga9
如果用户未登录,如何将用户重定向到登录页面?谢谢。
答案 0 :(得分:1)
您应该使用用户标题功能:
header('location: file.php');
在您的情况下:
header('location: /views/login.php');
答案 1 :(得分:0)
似乎您正在使用codeigniter。如果是这样,那么这段代码可能会对您有所帮助。
控制器:
public function index()
{
$this->load->view('login');
}
public function call_login()
{
$uname = $this->input->post('uname');
$password = $this->input->post('password');
$login_result = $this->your_model_name->login_user($uname,$password);
if($login_result)
{
$this->load->view('home');
}
else
{
$this->load->view('login',$a);
}
}
型号:
public function login_user($uname,$password)
{
$query = $this->db->where('uname',$uname)
->where('password',$password)
->get('users');
if($query->num_rows() == 1)
{
return TRUE;
}
else
{
return FALSE;
}
}
和您的视图
<!DOCTYPE html>
<html>
<head>
<title>Login</title>
</head>
<body>
<form action="call_login" method="post">
<input type="text" name="uname" placeholder="Enter username">
<input type="password" name="password" placeholder="Enter password">
<button type="submit">Login</button>
</body>
</html>
我希望这会对您有所帮助。