无法在索引/身份验证页面上检测到$ _SESSION ['username']

时间:2019-04-01 15:53:56

标签: php session login

登录后,我无法在index.html / auth.php页面上显示$ _SESSION ['username']。这很奇怪,因为它能够在登录后在其他页面上检测到$ _SESSION ['username'],而不是我的索引/身份验证页面。

编辑:正确登录后,login.php进入index.html。然后index.html将auth.php中的“登录”按钮显示为“登录”

login.php,用户将在其中输入用户名和密码进行登录,并创建$ _SESSION ['username']。

<?php session_start(); 
require('db.php');
// If form submitted, insert values into the database.
if (isset($_POST['username'])){
        // removes backslashes
	$username = stripslashes($_REQUEST['username']);
        //escapes special characters in a string
	$username = mysqli_real_escape_string($con,$username);
	$password = stripslashes($_REQUEST['password']);
	$password = mysqli_real_escape_string($con,$password);
	//Checking is user existing in the database or not
        $query = "SELECT * FROM `users` WHERE username='$username'
and password='".md5($password)."'";
	$result = mysqli_query($con,$query) or die(mysql_error());
	$rows = mysqli_num_rows($result);
        if($rows==1){
		$_SESSION['username'] = $username;
            // Redirect user to index.html
	    header("Location: ../index.html");
         }else{
	echo "<div class='form'>
<h3>Username/password is incorrect.</h3>
<br/>Click here to <a href='login.php'>Login</a></div>";
	}
    }else{
?>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Login</title>
<link rel="stylesheet" href="login.css" />
</head>
<body>
<div class="form">
<h1>Log In</h1>
<form action="" method="post" name="login">
<input type="text" name="username" placeholder="Username" required  style="text-align: center;"/>
<input type="password" name="password" placeholder="Password" required  style="text-align: center;"/>
<input name="submit" type="submit" value="Login" />
</form>
<a href='resetpassword.php'>Forgotten Password?</a>
	  <br/><a href='registration.php'>Register Here</a>
</div>
<?php } ?>
</body>
</html>

index.html,在其中调用auth.php页面(我的index.html页面的其余部分对该问题并不重要,已替换为“ blah blah blah”)。 编辑:我的服务器已配置,以便index.html可以运行php。

<?php session_start(); ?> 
 <?php require('login/auth.php'); ?>
  <?php include('login/checkadmin.php'); ?>
  <?php include('login/getoutages.php'); ?>

<!doctype html>
<html>
blah blah blah
</html>

auth.php,使用数据库的地方以及$ _SESSION ['username']的显示位置,但不显示!

<?php session_start();
		  ob_end_clean();
	  
	  if(isset($_SESSION['username'])) {
		  ?>
	  <table id="signedin">
	  <tr>
	  <td colspan="5">
	    Welcome, <?php echo $_SESSION['username']; ?>!
        </td>
		</tr>
		<tr>
		<td align="right">
		<a id="logouts" href="login/logout.php">Sign Out</a>
		</td>
		<td align="right"> 
		</td>
		<td align="left">
		<a id="profiles" href="login/profile.php">Profile</a>&nbsp;
		</td>
		</tr>
	  </table>
	  
	  
	  <?php } else if(!isset($_SESSION['username'])) { ?>
	 
	  <div id="notsignedin"><a id="logins" href="/login/login.php">Login</a></div>
	  
    <?php } ?>

任何信息都是有帮助的!谢谢!

编辑:我已经更新了代码以运行session_start();首先。 仍然无法检测到$ _SESSION ['username']。 EDIT2:切换$ username = $ _SESSION ['username'];在login.php中为$ _SESSION ['username'] = $ username;仍未显示在auth.php上

3 个答案:

答案 0 :(得分:0)

您应该先在每个文件中开始会话

<?php session_start(); ?>

至少要分别调用每个页面

答案 1 :(得分:0)

您需要在检查issest($ _ Session ['username'])之前调用session_start()

答案 2 :(得分:0)

您需要将session_start();放在该页面上的$_SESSION变量之前,因此,if(isset($_SESSION['username'])在会话开始之前不会被“设置”,只需将其移到页面的上方即可。页,最好先调用它。我通常将其与数据库连接一起放在配置页面中,并将其包括在每个页面中:)

希望这会有所帮助