【问题标题】:Executing PHP in an '<a href="" action="php here"></a>'在 '<a href="" action="php here"></a>' 中执行 PHP
【发布时间】:2017-02-14 03:08:13
【问题描述】:

我正在尝试执行一些 PHP,从您的浏览器中删除一个 cookie(它用于删除您的登录数据 cookie),当您单击名为“注销”的按钮时,我尝试使用一个操作来执行此操作,但是它似乎不这样工作?

<?php
                    if(isset($_COOKIE['LoggedIn']) && !empty($_COOKIE['LoggedIn'])) {
                    echo "<li><a href=\"#\" action=\"setcookie(\"LoggedIn\", \"\", time(), \"/\");\">Log Out</a></li>";
                    } else {
                        echo "<li><a href=\"login.php\">Log in</a></li>";
                    }
                ?>

我正在使用“\”将引号更改为可以放在主引号内的常规文本引号。

所以我的问题主要是,我将如何正确执行它?我已经尝试过这种方式,但它没有做任何事情。

【问题讨论】:

  • 除非我错过了什么,否则action 元素上没有action 属性。您是要创建链接还是表单?看起来您只是想用onclick 制作一个按钮,那么为什么不这样做呢?至于setcookie()这个函数,你在哪里定义的?
  • 不。仅在页面加载之前处理 PHP。当页面完全加载后,你想使用 javascript,要么做类似的过程,要么调用 ajax 函数向 PHP 页面发送请求。
  • 您正在尝试通过 HTML 中的“操作”执行 PHP 函数。我认为你想调用一个 JavaScript 函数,它会对你的页面进行 AJAX 调用,从而执行 PHP 函数。

标签: php cookies


【解决方案1】:

我建议只有一个 logout.php 按钮,在单击注销按钮后重定向到登录页面,如下所示:

echo "<li><a href=\"logout.php\">Log Out</a></li>";

注销.php

    //Expire Cookie
    setcookie('LoggedIn', '', time() - 60*100000, '/');

    //Redirect to page
    header( 'Location: https://www.foo.com/login.php' ) ;

【讨论】:

  • 我试过了,甚至用var_dump检查cookie是否仍然存在,cookie保存了用户名的字符串,但它仍然显示cookie存在
  • 您需要确保您设置的参数与您之前设置的完全相同(忽略值和到期时间),否则它将无法正常工作。我遇到了同样的问题,正是这个 SO 问题帮助了我:stackoverflow.com/questions/2856366/…
【解决方案2】:

据我所知,锚标签(“a”标签)没有“动作”属性的概念。我认为您在这里想要的是“onclick”而不是“action”。

对我来说,您还试图在“action”属性中执行 php 函数,这显然行不通 - 您需要创建一个简单的 javascript 函数来清除 cookie。例如:

var deleteCookie = function(name,path) {
    document.cookie = name + '=; expires=Thu, 01 Jan 1970 00:00:01 GMT;' + (path ? ' path=' + path : '');
};

然后您可以在链接上的“onclick”中调用它。

【讨论】:

    【解决方案3】:

    你可以使用这样的东西;

    <a href='/?logout'>Logout</a>
    
    if(isset($_GET['logout'])){ Logout(); }
    
    function Logout() {
    
        unset( $_SESSION[''] ); // unset and session data
        session_unset();  // remove all session variables
        session_destroy(); // destroy the session
        setcookie("LoggedIn", "", time() - 36000, "/");   //unset the remember me cookie
        header( "Location: /?loggedOut=1" );
        exit;
    }
    

    【讨论】:

      【解决方案4】:

      最好还是将您的 a href 标记链接到运行您需要和使用的功能的 php 文件

      header("Location: Your URL")
      

      重定向回登录页面或您想要的任何地方

      【讨论】:

        猜你喜欢
        • 2019-04-23
        • 1970-01-01
        • 2014-01-30
        • 1970-01-01
        • 1970-01-01
        • 2020-04-06
        • 1970-01-01
        • 1970-01-01
        • 2015-07-27
        相关资源
        最近更新 更多