从我们的讨论中,我认为下面的代码片段可以做你想做的。您可以使用$_SESSION
变量来存储用户数据和$_POST
变量来区分,如果用户提交的用户名和密码数据:
登录控制器
/* Already logged in */
if(isset($_SESSION['username'])
{
header('Location:home.html');
}
/* Not logged in */
else
{
/* Login submitted */
if(isset($_POST['submit']))
{
$user = new User(); // this is an instance of model class
$username = filter_input(INPUT_POST, 'username', FILTER_SANITIZE_STRING);
$password = filter_input(INPUT_POST, 'password', FILTER_SANITIZE_STRING);
$login_result = $user->login($username, $password);
/* Login success */
if($login_result == true)
{
$_SESSION['username'] = $username;
header('Location:home.html');
}
/* Login error */
else
{
$view_data = "Login incorrect"; // here you can set some data to be shown on login view
showView('login.html'); // pseudo code, change with your code to show login view
}
}
/* Show login form */
else
{
showView('login.html'); // pseudo code, change with your code to show login view
}
}
登录查看
<?php if(!empty($view_data)) echo $view_data; /* Here you show login result (i.e. errors) */ ?>
<form method="post" action="login.html">
<input type="text" id="username" name="username" placeholder="Username" />
<input type="password" id="password" name="password" placeholder="Password" />
<input type="submit" name="submit" value="Login" />
</form>
中当然,你必须在用户模型上实现$user->login
方法(我强烈建议你使用PDO statements查询数据库)。此方法只是简单地检查用户数据,并在登录成功时返回true,在失败时返回false。
注销时,只需unset($_SESSION['username'])
即可完成。
我也建议你看看这个session security question这样的东西,以保护你的会议免受劫持。希望能帮助到你。
名称“loginController”表明您正在使用某种MVC范例,它是正确的吗? – Giorgio 2014-08-30 17:39:23
是的 - 但我没有使用任何框架。我正在使用MVC的基本形式 - 一个用于登录(视图)的页面,一个用于控制器的文件和另一组用于表示模型的类。 – ChicagoSky 2014-08-30 18:04:24
不错。所以,我认为当您收到login.html页面的请求时,您的MVC结构将调用登录控制器,它将调用登录模型,该模型将检查用户名 - 密码是否正确并返回结果。根据此结果,登录控制器将显示登录视图或主视图。这一切是否正确? – Giorgio 2014-08-30 18:17:41