PHP |页面刷新后不会发生隐藏/显示表单

时间:2012-11-17 00:01:23

标签: forms session login refresh

我希望在用户登录时显示我的注销表单(包含注销按钮),否则隐藏。 我使用这段代码:

<?php
if(isset($_SESSION['logged_in'])) {
//show logout form
?>

步骤中的问题:

  1. 用户登录页面并以登录表格填写信息
  2. 提交登录表单(使用隐藏输入控制),点击按钮
  3. 将登录输入值与数据库值进行比较
  4. 如果输入值正确; $ _SESSION ['logged_in'] = true
  5. echo'您已登录!'
  6. 页面刷新(表单提交后自动完成);显示“您已登录”,但注销表单不是
  7. 现在我必须自己刷新页面;注销表单显示
  8. 退出时会发生同样的事情。当我自己刷新页面时,注销表单(和登录表单)仅隐藏/显示。

    任何可能的解决方案?

2 个答案:

答案 0 :(得分:1)

经过一些测试并潜入php.net后,我自己找到了答案。对于任何会遇到同样问题的人:

  1. 在PHP代码之后包含你的HTML;否则代码在首页刷新后不会影响html
  2. 为每个Cookie设置其实时时间。当没有时间填写时,cookie将在会话结束时被销毁。

    setcookie('username', $username); //NOT (no point at all in making this)
    setcookie('username', $username, time()+ 60*60*24*30 ); //YES
    
  3. session_destroy()会破坏会话但不会取消设置任何会话变量。因此,例如在注销时,您必须取消设置会话:

    unset($_SESSION['logged_in']);
    session_destroy(); //and then destroy session if needed
    

答案 1 :(得分:0)

尝试此模式Post/Redirect/Get

您只需发布登录信息,执行逻辑并将用户重定向到登录页面(或登录前的任何位置)。这样可以确保刷新用户浏览器(因此他/她被重定向到另一个页面)