1

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

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

步骤中的问题:

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

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

任何可能的解决方案?

4

2 回答 2

1

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

  1. 在您的 php 代码之后包含您的 html;否则代码在第一页刷新后不会影响 html
  2. 为每个 cookie 设置其生存时间。如果没有填写时间,cookie 会在 session 结束时被销毁。

    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
    
于 2012-11-17T11:30:27.417 回答
0

试试这个模式Post/Redirect/Get

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

于 2012-11-17T00:04:46.660 回答