登录不会重定向到下一页

时间:2016-03-12 10:42:16

标签: php html

我的登录页面拒绝重定向到主页,但是当从主页取消会话验证码时,它可以正常工作。 我试图确保没有用户可以访问主页而无需记录 请帮帮我。感谢

的index.php

<!DOCTYPE html><?php session_start();?>

<html>
<head>
 <title>User Login</title>
</head>

<body>
 <form action="login.php" method="post">
 <table width="500" align="center" bgcolor="skyblue">
 <tr align="center">
 <td colspan="3"><h2>User Login</h2></td>
</tr>

<tr>
 <td align="right"><b>Email</b></td>
 <td><input type="text" name="email" required="required"/></td>
</tr>

<tr>
<td align="right"><b>Password:</b></td>
 <td><input type="password" name="pass" required="required"></td>
</tr>

<tr align="center">
<td colspan="3">
<input type="submit" name="login" value="login"/>
</td>
</tr>
</table>
</form></body></html>

的login.php

<?php
$con = mysqli_connect("localhost","root","","test");
 if (mysqli_connect_errno())
 {
 echo "MySQLi Connection was not established: " . mysqli_connect_error();
 }

 if(isset($_POST['login'])){
 $email = mysqli_real_escape_string($con,$_POST['email']);
 $pass = mysqli_real_escape_string($con,$_POST['pass']);
 $sel_user = "select * from users where user_email='$email' AND    user_pass='$pass'";
 $run_user = mysqli_query($con, $sel_user);
 if (mysqli_num_rows($run_user)>0)
  {
 $_SESSION['user_email']=$email;
  header('Location: home.php');
  }
 else {
 echo "<script>alert(' Email or password is not correct, try again!')</script>";

 }

 }

?>

Home.php

<?php
session_start();
if (!isset($_SESSION['nID']))
header("Location: index.php");
?>
<html>

welcome
</html> 

session.php文件

<?php
$con = mysqli_connect("localhost","root","","tech_dept");
if (mysqli_connect_errno())
{
echo "MySQLi Connection was not established: " . mysqli_connect_error();
}
$user_check=$_SESSION['leaders_username'];
$sel_user = "Select leaders_username from login where  leaders_username='$user_check'";
$ses_sql = mysqli_query($con, $sel_user);
$row = mysql_fetch_assoc($ses_sql);
$login_session =$row['leaders_username'];
if(!isset($login_session)){
mysql_close($con); 
header('Location: index.php'); 
}
?>

3 个答案:

答案 0 :(得分:0)

从您的操作中删除login.php

<form action="" method="post">

答案 1 :(得分:0)

您必须在login.php文件中启动会话。否则,您的会话变量将不会被设置。

答案 2 :(得分:0)

对于初学者,需要在将要以任何方式使用session_start()超全局的所有页面上调用$_SESSION。不过,将它放在每个页面上都是一个好主意,因为在最糟糕的情况下,您的会话可能会在没有您意图的情况下到期。

特别是,您的Login.php不会调用session_start()。最有可能的是,error_reporting(E_ALL);会告诉你这个问题(PHP通知:&#34; 未定义的变量:_SESSION in ... &#34;)。

我还注意到您的Login.php没有设置$_SESSION['nID'],而是设置了$_SESSION['user_email'] = $email;。您需要与变量命名保持一致。您可以拥有多个会话,但从其外观来看,您的代码仅设置$_SESSION['user_email'],而您完全使用另一个会话。然后在sessions.php中使用$_SESSION['leaders_username']。 (你甚至用session.php做什么?

关于安全性的说明:您确实应该使用带有绑定变量的预准备语句来避免SQL注入。您正在使用允许此操作的API,因此您应该利用它。您应该阅读How can I prevent SQL injection in PHP?