Php 如何禁止用户在未登录时访问我的主页
我已经搜索了很多方法来阻止直接url访问,但是没有一种方法适合我的代码。我试着把Php 如何禁止用户在未登录时访问我的主页,php,url,Php,Url,我已经搜索了很多方法来阻止直接url访问,但是没有一种方法适合我的代码。我试着把 if ( !isset($_SESSION['logged-in']) || $_SESSION['logged-in'] !== true) { // not logged in, move to login page header('Location: login.php'); exit; } 该代码用于在用户未登录时尝试访问主页时验证和更改页面。未登录时无法访问主页,但问题是即使用户名和密码正确,它
if ( !isset($_SESSION['logged-in']) || $_SESSION['logged-in'] !== true) {
// not logged in, move to login page
header('Location: login.php');
exit;
}
该代码用于在用户未登录时尝试访问主页时验证和更改页面。未登录时无法访问主页,但问题是即使用户名和密码正确,它仍会转到登录页面。代码有什么问题
主页:
<?php
require 'user.php';
session_start();
if ( !isset($_SESSION['logged-in']) || empty($_SESSION['logged-in'])){
header('Location:index.php');
exit;
}
?>
<html>
<head>
<title>Home Page</title>
</head>
<body>
<p>
You have successfully logged in
<?php
session_start();
$user = $_SESSION['current_user'];
echo $user->firstname.' '.$user->lastname.'.';
?>
</p>
<p>This is your home page.</p>
<p>Click <a href='update_user.php?username=<?php echo $user->username ?>'>[here]</a> to update user profile.</p>
<p>Click <a href='list_user.php'>[here]</a> to see the list of users.</p>
</body>
</html>
主页
您已成功登录
这是你的主页
单击以更新用户配置文件。
单击以查看用户列表。
登录页面
<html>
<head>
<title>Login Page</title>
</head>
<body>
<p>Enter Username and Password to Login:</p>
<form action='login_process.php' method='post'>
<table border='1'>
<tr>
<td>Username:</td>
<td><input type='text' name='username'></td>
</tr>
<tr>
<td>Password:</td>
<td><input type='password' name='password'></td>
</tr>
<tr>
<td> </td>
<td><input type='submit' value='Login'></td>
</tr>
</table>
</form>
</body>
</html>
登录页面
输入要登录的用户名和密码:
用户名:
密码:
 
登录过程
<?php
require 'user.php';
?>
<?php
$user = new User();
$user->username = $_REQUEST['username'];
$user->password = $_REQUEST['password'];
$found = $user->checkLogin();
if ($found){//redirect to home page
session_start();
$_SESSION['current_user']=$user;
header("Location: home.php");
exit;
}
else{//invalid username and password
echo "Invalid username/password. Click <a href='index.php'>[here]</a> to login again.";
}
?>
1)您似乎没有为$\u SESSION['logged\u in']分配任何值,因此您的第一个断言可能会返回true。为什么不检查是否设置了“当前用户”
2) 您正在此行使用精确相等运算符(读取:!==):
$\u会话[“已登录”]!==真的
如果不是(类型为布尔且为true)或($\u会话不存在),则断言将始终为true,并导致登录页面
3) 在检查$会话超全局之前,您是否已完成会话启动?否则,$\u会话变量将不会填充任何内容。index.php
<?php
session_start();
require('user.php'); ?><html>
<head>
<title>Home Page</title>
</head>
<body>
<p><?php
// You are either logged in or not. If not, let user know to login.
if(!isset($_SESSION['username'])) { ?>
You must be logged in to view this content
<a href="login.php">Click to login</a>
<?php }
else {
$user = $_SESSION['current_user'];
echo $user->firstname.' '.$user->lastname.'.'; ?></p>
<p>This is your home page.</p>
<p>Click <a href='update_user.php?username=<?php echo $user->username ?>'>[here]</a> to update user profile.</p>
<p>Click <a href='list_user.php'>[here]</a> to see the list of users.</p>
<?php } ?>
</body>
</html>
主页
您必须登录才能查看此内容
这是你的主页
单击以更新用户配置文件。
单击以查看用户列表。
进程登录
<?php
session_start();
require('user.php');
$user = new User();
$user->username = $_REQUEST['username'];
$user->password = $_REQUEST['password'];
// Validate user
$found = $user->checkLogin();
if($found == true) {
//redirect to home page
$_SESSION['current_user'] = $user;
// Assign username to session for check on homepage and elsewhere
// If not logged in, this session variable should not be set
// Should be destroyed if user logs out.
$_SESSION['username'] = $_POST['username'];
header("Location: home.php");
exit;
}
//invalid username and password, redirect with login error
else
header("Location: login.php?error=login"); ?>
login.php
<html>
<head>
<title>Login Page</title>
</head>
<body>
<!-- If error, let user know their login failed-->
<p><?php echo (isset($_GET['error']) && $_GET['error'] == 'login')? '<span style="color: red;">Invalid Username/Password.</span> Please try again.':"Enter Username and Password to Login:"; ?></p>
<form action='login_process.php' method='post'>
<table border='1'>
<tr>
<td>Username:</td>
<td><input type='text' name='username'></td>
</tr>
<tr>
<td>Password:</td>
<td><input type='password' name='password'></td>
</tr>
<tr>
<td> </td>
<td><input type='submit' value='Login'></td>
</tr>
</table>
</form>
</body>
</html>
登录页面
用户名:
密码:
 
是会话启动()代码>使用会话加载到所有页面中?如果不是,就去做。使用会话时需要它。var\u dump($\u会话)代码>此代码不足以继续。尝试如果(!isset($会话['logged-in']){..}
或如果(!isset($会话['logged-in'])为空($会话['logged-in']))
-如果您想在注销时销毁会话,如果您还没有这样做,则需要这样做;和/或取消设置。它仍然不起作用。请在打开之后立即将错误报告添加到文件顶部。否,我希望我的用户在未登录时不允许访问主页。请给出您所说的确切代码好吗?我已经将登录用户更改为当前用户。我有一个会话\u start()。怎么了?(在SESSION_start()之后,在主页上尝试一个var_dump($_SESSION),并验证您的变量是否是您想要的?
<html>
<head>
<title>Login Page</title>
</head>
<body>
<!-- If error, let user know their login failed-->
<p><?php echo (isset($_GET['error']) && $_GET['error'] == 'login')? '<span style="color: red;">Invalid Username/Password.</span> Please try again.':"Enter Username and Password to Login:"; ?></p>
<form action='login_process.php' method='post'>
<table border='1'>
<tr>
<td>Username:</td>
<td><input type='text' name='username'></td>
</tr>
<tr>
<td>Password:</td>
<td><input type='password' name='password'></td>
</tr>
<tr>
<td> </td>
<td><input type='submit' value='Login'></td>
</tr>
</table>
</form>
</body>
</html>