0

我需要的是这个

我的菜单

我的PHP代码是:

class logout{
    public function __construct(){
        session_unset();
        session_destroy();
        session_write_close();
        setcookie(session_name(),'',0,'/');
        session_regenerate_id(true);
    }


}
if(!empty($_POST['logout'])){
    $object=new logout();
}

为此,我正在使用 html 代码:

<ul id="navlist">
      <li><a href="index.php">Home</a></li>
      <li><a href="dates.php">Dates</a></li>
      <li><a href="candidate.php">Candidates</a></li>
      <li><a href="database.php">Database</a></li>
      <li><a href="password.php">Change Password</a></li>
      <li><a href='logout.php'>Log Out</a></li>
</ul>

对于注销,我需要从我读过的锚点提交 javascript 表单是不安全的。

如果我这样做:

<li><a href=''><form method="post"><input type='submit' value='Log Out' name='logout' style="border:0px;" /></form></a></li>

我得到这样的东西:

糟糕的菜单

如何解决问题(我是否必须使用 javascript 来提交表单?)

4

3 回答 3

4

如果你加载了 jQuery,你可以通过 ajax 来实现。这样,您也可以保持导航样式。

<li><a href="#" class="log-out">Log Out</a></li>

$('.log-out').click(function() {
   $.post('logout.php');
});

了解有关$.post()$.ajax()的 ajax 简写的更多信息

于 2013-08-09T19:25:54.223 回答
2

我认为您不需要发布此内容,简化它...更改此行以使用$_GET

if(!empty($_GET['logout'])){
    $object=new logout();
}

并使用?logout=true

<ul id="navlist">
      <li><a href="index.php">Home</a></li>
      <li><a href="dates.php">Dates</a></li>
      <li><a href="candidate.php">Candidates</a></li>
      <li><a href="database.php">Database</a></li>
      <li><a href="password.php">Change Password</a></li>
      <li><a href='?logout=true'>Log Out</a></li>
</ul>

现在您可以在任何页面上包含您的注销代码。

于 2013-08-09T19:28:31.510 回答
0

是的,你需要手动提交表单,这里有一个纯 JS 的方式来做到这一点:

<li>
  <a href="" onclick="javascript: findForm('logout').submit()">
   <form id="logout" action="logout.php" method="post">
    <input type='submit' value='Log Out' name='logout' style="border:0px;" />
   </form>
  </a>
</li>

function findForm(id) {
  for (var i = document.forms.length-1; i >= 0; i--) {
    if (document.forms[i].id == id) return document.forms[i];
  }

  return null;
}
于 2013-08-09T19:27:22.907 回答