已登录但无法访问已登录用户的页面?
Logged but can't access page for logged users?
我在 PHP 中很菜鸟,但我正在努力锻炼。从昨天开始,我遇到了一个我什至无法理解的问题,我认为我的代码是正确的,但似乎是错误的
所以这是我的功能,只允许登录用户访问页面
functions.php
function logged_only()
{
if(session_status() == PHP_SESSION_NONE)
{
session_start();
}
if(!isset($_SESSION['auth']))
{
$_SESSION['flash']['danger'] = "You can't enter this page - not logged in";
header('Location: login/login.php');
exit();
}
}
所以如果我没有登录,它应该将我重定向到登录页面,很简单
login.php
elseif(password_verify($_POST['password'], $user->password)){
$_SESSION['auth'] = $user;
$_SESSION['flash']['success'] = 'You're now connected';
header('Location: ../profile.php'); // user's homepage
exit();
上面和下面有一些代码,但效果很好。
所以在这种情况下,脚本应该将用户的信息插入到他的 $_SESSION 中,但它除了将我重定向到 login.php 之外什么都不做。此外,“profile.php”仅包含 $ 的 "logged_only();" 和一个 print_r(当我删除到 login.php 的重定向时) _SESSION,只显示“您无法访问此页面”(因为我正在通过 $_SESSION 发送消息)
有人指导我吗?谢谢
您也许应该阅读 PHP 中的 session_start()
:PHP Manual
简而言之:session_start()
启动新会话或恢复与客户端的现有会话。
因此,在每次重定向(也指向您的 login.php)后,您需要调用 session_start()
.
不需要
if (session_status() == PHP_SESSION_NONE){
session_start();
}
你应该只使用
session_start();
(在两者中,您的 functions.php 和 login.php) 在 访问 $_SESSION
变量之前。
functions.php
function logged_only(){
session_start();
if(!isset($_SESSION['auth'])){
$_SESSION['flash']['danger'] = "You can't enter this page - not logged in";
header('Location: login/login.php');
exit();
}
}
login.php
session_start();
// ... Rest of code
elseif(password_verify($_POST['password'], $user->password)){
$_SESSION['auth'] = $user;
$_SESSION['flash']['success'] = 'You're now connected';
header('Location: ../profile.php'); // user's homepage
exit();
我在 PHP 中很菜鸟,但我正在努力锻炼。从昨天开始,我遇到了一个我什至无法理解的问题,我认为我的代码是正确的,但似乎是错误的
所以这是我的功能,只允许登录用户访问页面
functions.php
function logged_only()
{
if(session_status() == PHP_SESSION_NONE)
{
session_start();
}
if(!isset($_SESSION['auth']))
{
$_SESSION['flash']['danger'] = "You can't enter this page - not logged in";
header('Location: login/login.php');
exit();
}
}
所以如果我没有登录,它应该将我重定向到登录页面,很简单
login.php
elseif(password_verify($_POST['password'], $user->password)){
$_SESSION['auth'] = $user;
$_SESSION['flash']['success'] = 'You're now connected';
header('Location: ../profile.php'); // user's homepage
exit();
上面和下面有一些代码,但效果很好。
所以在这种情况下,脚本应该将用户的信息插入到他的 $_SESSION 中,但它除了将我重定向到 login.php 之外什么都不做。此外,“profile.php”仅包含 $ 的 "logged_only();" 和一个 print_r(当我删除到 login.php 的重定向时) _SESSION,只显示“您无法访问此页面”(因为我正在通过 $_SESSION 发送消息)
有人指导我吗?谢谢
您也许应该阅读 PHP 中的 session_start()
:PHP Manual
简而言之:session_start()
启动新会话或恢复与客户端的现有会话。
因此,在每次重定向(也指向您的 login.php)后,您需要调用 session_start()
.
不需要
if (session_status() == PHP_SESSION_NONE){
session_start();
}
你应该只使用
session_start();
(在两者中,您的 functions.php 和 login.php) 在 访问 $_SESSION
变量之前。
functions.php
function logged_only(){
session_start();
if(!isset($_SESSION['auth'])){
$_SESSION['flash']['danger'] = "You can't enter this page - not logged in";
header('Location: login/login.php');
exit();
}
}
login.php
session_start();
// ... Rest of code
elseif(password_verify($_POST['password'], $user->password)){
$_SESSION['auth'] = $user;
$_SESSION['flash']['success'] = 'You're now connected';
header('Location: ../profile.php'); // user's homepage
exit();