我正在使用登录功能。
但是当我从我的网站更改页面时,我必须再次登录。
当我更改页面时,如何让用户登录?
这是我的代码:
<?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>";
}
}
?>
我的功能代码:
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;
}
}
答案 0 :(得分:4)
使用$_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'];
注销时,只需使用session_destroy()破坏会话。
因此,$_SESSION['first_name']
将是可以从代码中的任何位置操作的用户的第一个名称。
编辑 :我引用了php.net而不是W3学校,因为很多人似乎不喜欢它。
答案 1 :(得分:2)
您没有保存用户的状态。您应该在会话中保存用户的状态并在下一页上检索。
答案 2 :(得分:2)
首先我强烈建议不要使用LIKE运算符,而是使用=运算符。我也建议使用参数化的quires。此外,我建议哈希用户的密码,盐渍它们也是一个非常好的主意。
阅读这些页面。这里有很好的信息:
How can I prevent SQL injection in PHP?
Secure hash and salt for PHP passwords
crackstation.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;
}
}
现在在需要用户登录的其他页面上
session_start();
if (!isset($_SESSION['username']) || empty($_SESSION['username'])) {
// redirect to your login page
exit();
}
$username = $_SESSION['username'];
// serve the page normally.
答案 3 :(得分:0)
在您的 config.php 文件中添加:
$_SESSION["fullname"]=$name;
您想让用户保持登录状态的其他页面:
<?php
if(!isset($_SESSION["fullname"]) || empty($_SESSION["fullname"]))
{
?>
<li><a href="/starks/login.php" class="active">Login</a></li>
<?php
}
else
{
?>
<li><a href="/starks/login.php" class="active"><?php echo $_SESSION["fullname"] ?></a></li>
<?php
}
?>