我正在建立一个网站,当用户已经登录时,即会话处于活动状态时,该网站不得显示登录选项。我已经尝试过处理这个问题,但它没有返回所需的输出。请帮忙。谢谢
<?php
if(!isset($_SESSION)) {echo "<li><a href='Employee.php'>Login</a></li>";}
?>
编辑:我添加了从数据库中检查登录详细信息并启动会话的部分。
$query = "SELECT Cust_FName from customer where Cust_ID='$name' and Password='$pass'";
$result = mysqli_query($con, $query);
if(mysqli_num_rows($result)!= false)
{
$row = mysqli_fetch_row($result);
echo row[0];
if(mysqli_num_rows($result) > 0)
{
echo "Logged in!";
session_start();
$_SESSION['userName'] = $row[0];
header("Location: index.php");
}
}
如果您想检查会话是否启动,可以使用
if(session_status() != PHP_SESSION_ACTIVE) {
echo "<li><a href='Employee.php'>Login</a></li>";
}
问题是,如果用户没有登录,会话也会出现。你必须检查是否设置了例如$_SESSION['user_id']
:
if(!isset($_SESSION['user_id']) {
echo "<li><a href='Employee.php'>Login</a></li>";
}
在我的示例中,$_SESSION['user_id']
将在用户登录成功时填写。
问题
根据您的评论:
登录按钮应该只在用户没有登录时显示,一旦登录,它就会消失。
解决方案
// This would be your login.php page
<?php
session_start();
// process your HTML form, like this
if(isset($_POST['login'])){
// Remember: always validate your form inputs
$name = $_POST['name'];
$pass = $_POST['pass'];
$query = "SELECT Cust_FName from customer where Cust_ID='$name' and Password='$pass'";
$result = mysqli_query($con, $query);
if(mysqli_num_rows($result)!= false){
$row = mysqli_fetch_row($result);
//echo row[0];
if(mysqli_num_rows($result) > 0){
//echo "Logged in!";
$_SESSION['userName'] = $row[0];
header("Location: index.php");
exit(); // exit() is necessary, otherwise the script execution is not terminated. Setting header alone is not enough to redirect.
}
}
}
if(isset($_SESSION['userName'])){
// user is already logged in
// redirect the user to a different page
// header("Location: index.php");
// exit();
}else{
// user is not logged in
// display login option
?>
<!--Your HTML form for login-->
<form action="login.php" method="POST">
<input type="text" name="name" value="" /><br />
<input type="text" name="pass" value="" /><br />
<input type="submit" name="login" value="Login" />
</form>
<?php
}
?>
编辑:
会话是一个驻留在服务器中的文件,在该文件中我们可以存储任意数量的信息。我们通常在客户端的浏览器上部署会话cookie。
在输出任何HTML或空白之前,我们需要开始我们的会话
当我们这样做的时候,
<?php
session_start();
?>
它会说,转到浏览器,获取会话id并打开相应的文件,如果没有找到任何会话id,它将启动一个新的会话。用户只能看到会话id,其他什么都看不到。
提示:记得不时清理会话
放入登录页面
<?php
session_start();
// Store Session Data
$_SESSION['login_user']= $username; // Initializing Session
?>
当你必须检查时,使用
<?php
session_start();
// Store Session Data
if(isset($_SESSION['login_user'])){
//do things
}
?>
以及在退出时
<?php
session_destroy();
?>