PHP - 创建注销链接

Posted

技术标签:

【中文标题】PHP - 创建注销链接【英文标题】:PHP - Create Logout Link 【发布时间】:2012-02-15 14:13:47 【问题描述】:

创建注销链接的最佳方式是什么?我想销毁所有会话并重定向回登录页面,但我不确定执行此操作的最佳方法。现在我有指向 admin/logout.php 的链接,但我觉得向用户显示我的文件夹结构是一件坏事。这是我的代码,非常简单:

session_start();
    session_destroy();
        echo "<script type=\"text/javascript\">window.location.href='../login.php';</script>";

那么最好用 javascript 或 ajax 做一些事情吗?

【问题讨论】:

既然可以header("Location: login.php"),为什么还要通过JS重定向? 看看这个:***.com/questions/2241769/… @MarcB 前段时间我问了一个问题,说 javascript 重定向是最好的选择,我打算链接它,但后来它得到了一堆关于它有多糟糕的问题,所以我可能应该去返回并更改 xD 【参考方案1】:

如果您担心暴露目录结构,请不要使用目录。只需让您的所有页面检查 logout 查询参数:

<?php
if (isset($_GET['logout'])) 
   session_start();
   session_destroy();
   header("Location: login.php");
   exit();

这样您就可以从任何页面注销,您的“管理”文件夹永远不会暴露,并且执行 header() 重定向意味着用户没有机会中断您可以使用的任何其他重定向方法(元标记, javascript等...)。页面上根本没有任何内容供用户查看,因为您没有输出任何内容。

【讨论】:

是的,javascript 重定向是问题所在。出于某种原因,它暴露了我的目录结构,但是当我更改为 header() 时 - 已修复。我也喜欢$_GET[] 的想法,而不是为了注销而制作一个全新的文件。【参考方案2】:

注销.php:

<?php
session_start();
session_destroy();
?>
<html>
<head>
<meta HTTP-EQUIV="REFRESH" content="0; url=login.php">
</head>
</html>

这需要是一个单独的 .php 页面。只需链接到它,他们不会看到这个,而是会看到 index.php 的内容,但没有存储会话数据:)

这可能是解决此问题的最佳和最简单的方法。全部使用简单的 PHP,带有 HTML 重定向。

【讨论】:

看到这就是我的想法...我的admin/logout.php 看起来像我的问题中链接的代码(在 php 标签内),没有 HTML。但是 URL 仍然转到 /admin/logout.php。我认为我的问题最终是 javascript 重定向,因为当我使用 header() 时它不会这样做

以上是关于PHP - 创建注销链接的主要内容,如果未能解决你的问题,请参考以下文章

php 登录注销链接

php WooCommerce:添加登录和注销链接到菜单

php WooCommerce | Sage 9中的条件登录/注销链接

覆盖 Django admin 中的注销链接

快速单击链接会导致注销(会话锁定?)

React on Rails - 如何将登录链接更改为注销链接?