PHP Session的登录问题

时间:2015-11-21 09:34:30

标签: php session redirect login

嗨,我在这里遇到了问题。 我需要在这里登录一个帐户 但在我输入所有详细信息并单击“登录”后,页面会将我重定向回登录页面。但实际上该帐户已登录,因为它无法在登录后重定向回主页。 这是什么问题?我正在使用Session。 我把我的session_start放在connect.php(用于连接数据库) 以下是The Code

<?php error_reporting(0) ?>
<?php
include_once 'connect.php';
//Code Refer to http://www.w3schools.com/php/func_http_setcookie.asp
if(isset($_SESSION['user'])!="")
{
   header("Location: Home.php");
}
  if(isset($_POST['btn-login']))
   { 
     $username = mysql_real_escape_string($_POST['username']);
     $upass = mysql_real_escape_string($_POST['password']);
     $res=mysql_query("SELECT * FROM user WHERE u_username='$username'");
     $row=mysql_fetch_array($res);
       if($row['u_password']==md5($upass))
          {
            $_SESSION['user'] = $row['u_ID'];
            header("Location: Home.php");
          }
        else
          {
            ?>
            <script>alert('wrong details');</script>
           <?php
          }
 ?>


 <?php
 $year = time() + 31536000;
 setcookie('rememberme', $_POST['username'], $year);

 if ($_POST['rememberme'])
 {
   setcookie ('rememberme',$_POST['username'], $year);
 }
 else
 {
    setcookie(rememberme, $past);
 }


}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Login</title>
<link rel="stylesheet" href="Style.css" type="text/css" />
</head>
<body>
 <div id="header">
 <div id="left">
 <label>AngelService</label><br/>
 <p>Royal Borough of Greenwich</p>
 </div>
 </div>
 <center> <a href="Home.php">Home Page</a>  | <a href="Viewpost.php">View Post</a> | <a href="PostService">Post A Service</a></center>
 <center>
<div id="login-form">
<form method="post">
<table align="center" width="30%" border="0">
  <tr>
    <td><input type="text" name="username" placeholder="Your Username" required value="<?php
     echo $_COOKIE['rememberme']; ?>"/>
   </td>
 </tr>
 <tr>
   <td><input type="password" name="password" placeholder="Your Password" required />
  </td>
</tr>
<tr>
   <td><button type="submit" name="btn-login">Sign In</button></td>
</tr>
<tr>
  <td>
    <input type="checkbox" name="rememberme" value="rememberme" style="font-   size:6px;"> Remember Me<br>
  </td>
 </tr>
  <tr>
  <td>
   <a href="Register.php">Sign Up Here</a></td>
 </tr>
</table>
</form>
</div>
</center>
<div id="footer">
<div id="center" align="center">
    <br/>
    <p>Angel Services | Royal Borough of Greenwich | Created By UOG Student: Kuai Boon Ting</p>

</div>
</div>
</body>
</html>

2 个答案:

答案 0 :(得分:1)

您缺少操作=&#34;您的重定向页面&#34;在表格标签中,即

<form method="post" action="forexample-Home.php">
.....
</form>

答案 1 :(得分:1)

您可以采取一些措施来改进代码。对于初学者,您不需要像对方那样直接关闭和打开PHP标记

<?php error_reporting(0) ?>
<?php
include_once 'connect.php'; 

可能只是

<?php error_reporting(0); 
include_once 'connect.php';

声明if(isset($_SESSION['user'])!="")并不完全符合您的想法。 isset($_SESSION['user'])返回一个布尔值(true / false),因此检查布尔值是否为空将无法正常工作。您可以if (!empty($_SESSION['user'])) {...检查它是否已设置以及是否为空。查看documentation for isset()documentation for empty()

对于您的实际问题:请注意,在向浏览器输出任何空格(HTML或PHP header();)后,无法调用echo函数。这将显示为 PHP警告,如果您放置error_reporting(-1);而不是忽略所有错误(如您当前正在将error_reporting设置为0),则会报告。

另一个答案建议使用表单的HTML action - 属性,但如果登录无效,最好将其发送到同一页面,并且只有重定向才能登录有效。这被称为&#34;验证和重定向&#34;。

以下这些指针只是为了改进您的代码,而不一定是您的问题的原因。

  1. 如果你想设置一个cookie,它必须在之前完成 any并且所有输出都被发送到浏览器(see this post),所以如果{{ 1}}语句失败,并且它进入else括号,您的cookie将不会被设置。

  2. 如果可以,您应该停止使用if($row['u_password']==md5($upass))功能。它们已被弃用,将来会被删除。切换到mysql_*或PDO。 (查看this post)。

  3. mysqli_*哈希的使用并不安全。如果你有PHP 5.5.0或更高版本,你应该考虑使用password_hashpassword_verify

  4. md5后,您应始终放置一个header("Location: ....");,以便代码在重定向后停止执行。 (查看this post)。