PHP - 如何让我的用户登录?

use*_*048 5 php session

我正在使用登录功能.

但是当我从我的网站更改页面时,我必须再次登录.

当我更改页面时,如何让用户登录?

这是我的代码:

<?php
error_reporting(0);
if($_POST['login']=="") {
?>
  <form method="POST" action="<?php echo $_SERVER['PHP_SELF']; ?>" >
    <label><a>Utilizador</a><input type="text" name="login" id="s-user"></label>
    <label><a>Senha</a><input type="text" name="password" id="s-pass"></label>
      <input type="submit" class="submit" value="Entrar">

  </form>


<?php
}
else {
?>
<?php
include("classes/Utilizadores/Cliente.class.php");


        if($_REQUEST['login']!="") {
            if($_REQUEST['password']!="") {

                            $clientes = new Cliente();
                            if($clientes->verificarCliente($_REQUEST['login'], $_REQUEST['password'])) {
                                echo "<br>";
                            } else {
                                echo "<br><a>Login ou senha errados, caso não tenha, <a href='criarconta.php'> registre-se</a>, <a>ou</a> <a href='index.php'>volte a tentar.</a></a><br>";
                            }
                            $clientes->endCliente();

            } else {
                echo "ERRO: Deve introduzir a sua password...<br>";
            }
        } else {
            echo "ERRO: Deve introduzir o seu login...<br>";
        }

}
?>
Run Code Online (Sandbox Code Playgroud)

我的功能代码:

function verificarCliente($login, $password) {
    $sql = "SELECT * FROM users WHERE login LIKE '$login' AND password LIKE '$password'";
    if(($rs=$this->bd->executarSQL($sql))){
        if(mysql_fetch_row($rs)==false) {
            return false;
        } else {

                                echo "<br><b> <a>Bem-Vindo <font size=2>" .mysql_result($rs,0,"login")."</font></b></a><br><br><br>";     

            return true;

        }
    }
    else {
        return false;
    }
}
Run Code Online (Sandbox Code Playgroud)

Eis*_*dil 5

使用$_SESSION变量。http://www.php.net/manual/en/reserved.variables.session.php。它们帮助您存储变量,您可以从网站的任何其他部分访问它们。

登录成功时:

1)查询基本信息,如名字、姓氏、性别、生日等。

2)将它们保存在变量中,例如$first_name,$last_name等。

3)将这些变量分配给会话,如下所示:

$first_name = $_SESSION['first_name'];
$birthday = $_SESSION['birthday'];
Run Code Online (Sandbox Code Playgroud)

注销时,只需使用 session_destroy() 销毁会话即可。

因此,$_SESSION['first_name']可以从代码中的任何位置操作用户的名字。

编辑:我引用了 php.net 而不是 W3 school,因为很多人似乎不喜欢它。

  • 不推荐w3schools作为学习php的参考。该网站不是很准确 (2认同)
  • @bivoc 读完你对 w3schools 的想法后,我的整个生活对我来说都是谎言。 (2认同)

rob*_*bmj 2

首先,我强烈建议不要使用 LIKE 运算符,而是使用 = 运算符。我还建议使用参数化查询。另外,我建议对用户的密码进行哈希处理,对它们进行加盐也是一个非常好的主意。

读一下这些页面。这里有很好的信息:

如何防止 PHP 中的 SQL 注入?

PHP 密码的安全哈希和盐

rackstation.net提供了一个免费的多种语言库和一个很好的解释。

但您需要跟踪登录的用户:

function verificarCliente($login, $password) {

        $sql = "SELECT * FROM users WHERE login = '$login' AND password = '$password'";
        if(($rs=$this->bd->executarSQL($sql))){
            if(mysql_fetch_row($rs)==false) {
                return false;
            } else {
                session_start();
                $the_username = // grab the username from your results set  
                $_SESSION['username'] = $the_username; 

                // put other things in the session if you like
                echo "<br><b> <a>Bem-Vindo <font size=2>" .mysql_result($rs,0,"login")."</font></b></a><br><br><br>";     

                return true;

            }
        }
        else {
            return false;
        }
    }
Run Code Online (Sandbox Code Playgroud)

现在在其他需要用户登录的页面上

session_start();
if (!isset($_SESSION['username']) || empty($_SESSION['username'])) {
      // redirect to your login page
      exit();
}

$username = $_SESSION['username'];
// serve the page normally.
Run Code Online (Sandbox Code Playgroud)