使用 Session 的 Smarty 登录 - 需要刷新页面才能在模板中看到
Smarty Login with Session - needs page refresh to see in templates
我有一个带有 smarty 模板引擎的小型 Web 应用程序。登录名在 header.tpl 中。登录和注销工作正常,但它们需要重新加载页面才能看到 header 中的变化。为什么会发生这种情况的任何想法?我认为没有激活缓存。
header.tpl
{if isset($user) }
<form class="logoutform col-md-12 nopadding" method="post">
<div class="col-md-10"><p class="welcometext">Hello {$user.username}!</p></div>
<div class="hidden"><input type="hidden" name="action" value="logout"></div>
<div class="col-md-2"><button type="submit">Logout</button></div>
</form>
{else}
<form class="loginform col-md-12 nopadding" method="post">
<div class="col-md-5"><input type="text" placeholder="Username" name="username"></div>
<div class="col-md-5"><input type="password" placeholder="Password" name="password"></div>
<div class="hidden">
<input type="hidden" name="action" value="login">
</div>
<div class="col-md-2"><button type="submit">Login</button></div>
</form>
{/if}
der page.class.php
中的登录和注销功能
function logout()
{
session_destroy();
//header('Location: '.BASEURL);
}
function login($username, $password)
{
$pdo = new PDO('mysql:host='.HOST.';dbname='.DATABASE, USER, PASSWORD);
$statement = $pdo->prepare("SELECT * FROM users WHERE username = :username");
$result = $statement->execute(array('username' => $username));
$user = $statement->fetch(PDO::FETCH_ASSOC);
//DB Abfrage in user class exportieren? checkUserLogin, dann return true oder errormeldung
if ($user == false || password_verify($password, $user['password']) == false) {
$loginerror = 'username or password wrong';
}
else {
if ($user['email_confirmed']==0) {
//$this->assign('error', 'Please confirm your e-mail adress.');
$loginerror = 'please confirm your e-mail adress.';
}
else {
//$_SESSION['loggedUser'] = $user['id'];
$_SESSION['user'] = $user;
return true;
}
}
$this->assign('loginerror', $loginerror);
}
}
是的,就像服务器端的任何 Web 应用程序一样。您必须在登录结束时进行重定向,例如 header('Location: '.$yourLoginPageUrl);
以强制刷新。
我有一个带有 smarty 模板引擎的小型 Web 应用程序。登录名在 header.tpl 中。登录和注销工作正常,但它们需要重新加载页面才能看到 header 中的变化。为什么会发生这种情况的任何想法?我认为没有激活缓存。
header.tpl
{if isset($user) }
<form class="logoutform col-md-12 nopadding" method="post">
<div class="col-md-10"><p class="welcometext">Hello {$user.username}!</p></div>
<div class="hidden"><input type="hidden" name="action" value="logout"></div>
<div class="col-md-2"><button type="submit">Logout</button></div>
</form>
{else}
<form class="loginform col-md-12 nopadding" method="post">
<div class="col-md-5"><input type="text" placeholder="Username" name="username"></div>
<div class="col-md-5"><input type="password" placeholder="Password" name="password"></div>
<div class="hidden">
<input type="hidden" name="action" value="login">
</div>
<div class="col-md-2"><button type="submit">Login</button></div>
</form>
{/if}
der page.class.php
中的登录和注销功能function logout()
{
session_destroy();
//header('Location: '.BASEURL);
}
function login($username, $password)
{
$pdo = new PDO('mysql:host='.HOST.';dbname='.DATABASE, USER, PASSWORD);
$statement = $pdo->prepare("SELECT * FROM users WHERE username = :username");
$result = $statement->execute(array('username' => $username));
$user = $statement->fetch(PDO::FETCH_ASSOC);
//DB Abfrage in user class exportieren? checkUserLogin, dann return true oder errormeldung
if ($user == false || password_verify($password, $user['password']) == false) {
$loginerror = 'username or password wrong';
}
else {
if ($user['email_confirmed']==0) {
//$this->assign('error', 'Please confirm your e-mail adress.');
$loginerror = 'please confirm your e-mail adress.';
}
else {
//$_SESSION['loggedUser'] = $user['id'];
$_SESSION['user'] = $user;
return true;
}
}
$this->assign('loginerror', $loginerror);
}
}
是的,就像服务器端的任何 Web 应用程序一样。您必须在登录结束时进行重定向,例如 header('Location: '.$yourLoginPageUrl);
以强制刷新。