Php Smarty登录会话-需要刷新页面才能在模板中查看

Php Smarty登录会话-需要刷新页面才能在模板中查看,php,smarty,Php,Smarty,我有一个带有smarty模板引擎的小型web应用程序。登录名位于header.tpl中。登录和注销工作正常,但需要重新加载页面以查看标题中的更改。你知道为什么会这样吗?我认为没有缓存被激活 header.tpl {if isset($user) } <form class="logoutform col-md-12 nopadding" method="post"> <div class="col-md-10"><p class="welcomet

我有一个带有smarty模板引擎的小型web应用程序。登录名位于header.tpl中。登录和注销工作正常,但需要重新加载页面以查看标题中的更改。你知道为什么会这样吗?我认为没有缓存被激活

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} 

是的,就像服务器端的任何web应用程序一样。您必须在登录结束时执行重定向,类似于
header('Location:'。$yourLoginPageUrl)
强制刷新。

好的,我在登录和注销功能结束时尝试过。它的工作注销,但没有改变登录。。。标题('位置:'.BASEURL);啊,现在它开始工作了。我必须在调用login函数后执行此操作,而不是在函数内部。救命啊!是的,在登录结束时。你能接受这个答案吗?
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);
   }
}