【问题标题】:PHP | hide/show form does not occur after page refreshPHP |页面刷新后不会出现隐藏/显示表单
【发布时间】:2012-11-05 17:52:31
【问题描述】:

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

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

步骤中的问题:

  1. 用户进入页面并在登录表单中填写信息
  2. 提交登录表单(通过隐藏输入控制),点击按钮
  3. 登录输入值与数据库值进行比较
  4. 如果输入值正确; $_SESSION['logged_in'] = true
  5. echo '您已登录!'
  6. 页面刷新(表单提交后自动完成);显示“您已登录”,但未显示注销表单
  7. 现在我必须自己刷新页面;显示退出表单

注销时也会发生同样的事情。注销表单(和登录表单)仅在我自己刷新页面时隐藏/显示。

任何可能的解决方案?

【问题讨论】:

    标签: forms session login refresh


    【解决方案1】:

    试试这个模式Post/Redirect/Get

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

    【讨论】:

    • 我一定会研究这种模式。不过,我不相信这可以解决我的问题。
    • 您是否在用户登录后设置 $_SESSION['logged_in'] = true ?因为如果您不设置该值,则 $_SESSION['logged_in'] 始终未定义。所以如果你提供了块它就不会进入。
    • 我编辑了这个问题。找到了问题,但不知道解决办法
    • 如果login.html中有php代码,你应该重命名为login.php
    • 改名了,但没什么不同。因为我在 index.php 中包含了 login.html,所以它确实可以工作。但我还是遇到了同样的问题。
    【解决方案2】:

    经过一些测试并深入 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
      

    【讨论】:

      猜你喜欢
      • 2019-03-25
      • 1970-01-01
      • 1970-01-01
      • 2014-11-30
      • 1970-01-01
      • 2013-03-01
      • 1970-01-01
      • 2017-03-18
      • 1970-01-01
      相关资源
      最近更新 更多