PHP:如何从按钮中删除带有onclick事件的cookie


PHP: How to delete a cookie with onclick event from button

我正在尝试使用 php 创建一个注销按钮。我可能以完全错误的方式解决这个问题,但无论如何,我试图通过单击按钮删除cookie。

    <?php 
    function logOut() {
        setcookie('userDetails[username]',"", time()-1200);
    }

if(isset($_COOKIE["userDetails"])) {
    echo "<table id='rtgLoginBox'>" ;
        echo "<tr>" ;
            echo "<td> Cookie " . $_COOKIE["userDetails"]["username"] . "!";
            echo "<td></td>" ;
        echo "</tr><tr>" ;
            echo "<td><input id='rtgLoginBtn' type='submit' value='Log Out' onclick='"logOut();'" /></td>" ;
            echo "<td>";
            echo "<td></td>" ;
            echo "<td></td>" ;
        echo "</tr><tr>" ;
            echo "<td></td>" ;
            echo "<td></td>" ;
        echo "</tr>" ;
    echo "</table>" ;
} else {
    echo "<table id='rtgLoginBox'>" ;
        echo "<tr>" ;
            echo "<td><form action='process.php' method='post'>Username:</td>" ;
            echo "<td><input name='usernamein' id='rtgUsernameTxt' type='text' size='20' class='rtgSignUpTxt'/></td>" ;
        echo "</tr><tr>" ;
            echo "<td>Password:</td>" ;
            echo "<td><input name='passwordin' id='rtgPasswordTxt' type='password' size='20' class='rtgSignUpTxt' /></td>" ;
        echo "</tr><tr>" ;
            echo "<td></td>" ;
            echo "<td><input id='rtgLoginBtn' type='submit' value='Log In' />  </form><input id='rtgLoginBtn' type='submit' value='Sign Up' onclick='"location.href='SignUp.php''" /></td>" ;
        echo "</tr><tr>" ;
            echo "<td></td>" ;
            echo "<td><a href='mysite.com'><p style='padding:0 !important;'>Forgot Login Details?</p></a></td>" ;
        echo "</tr>" ;
    echo "</table>" ;
    }
    ?>

据我在网上阅读,这应该有效吗?我还尝试将函数放在回显表下,但这也没有用。

如果该人按下注销按钮,然后将他们重定向到名为 whatever.php 的新页面,此代码将导致他们注销。你显然可以把它改成你想要的任何东西。

<?php 
    function logOut() {
        setcookie('userDetails[username]',"", time()-1200);
        unset($_COOKIE['userDetails']);
    }
if ('POST' === $_SERVER['REQUEST_METHOD'])
{
    logOut();
    header('Location: /whatever.php');
    exit;
}
if(isset($_COOKIE["userDetails"])) {
    echo "<form action='".htmlspecialchars($_SERVER['PHP_SELF'])."' method='post'><table id='rtgLoginBox'>" ;
        echo "<tr>" ;
            echo "<td> Cookie " . $_COOKIE["userDetails"]["username"] . "!";
            echo "<td></td>" ;
        echo "</tr><tr>" ;
            echo "<td><input id='rtgLoginBtn' type='submit' value='Log Out' /></td>" ;
            echo "<td>";
            echo "<td></td>" ;
            echo "<td></td>" ;
        echo "</tr><tr>" ;
            echo "<td></td>" ;
            echo "<td></td>" ;
        echo "</tr>" ;
    echo "</table></form>" ;
} else {
    echo "<table id='rtgLoginBox'>" ;
        echo "<tr>" ;
            echo "<td><form action='process.php' method='post'>Username:</td>" ;
            echo "<td><input name='usernamein' id='rtgUsernameTxt' type='text' size='20' class='rtgSignUpTxt'/></td>" ;
        echo "</tr><tr>" ;
            echo "<td>Password:</td>" ;
            echo "<td><input name='passwordin' id='rtgPasswordTxt' type='password' size='20' class='rtgSignUpTxt' /></td>" ;
        echo "</tr><tr>" ;
            echo "<td></td>" ;
            echo "<td><input id='rtgLoginBtn' type='submit' value='Log In' />  </form><input id='rtgLoginBtn' type='submit' value='Sign Up' onclick='"location.href='SignUp.php''" /></td>" ;
        echo "</tr><tr>" ;
            echo "<td></td>" ;
            echo "<td><a href='mysite.com'><p style='padding:0 !important;'>Forgot Login Details?</p></a></td>" ;
        echo "</tr>" ;
    echo "</table>" ;
    }
    ?>

正如你说的"onclick='logOut()'",你从javascript调用函数logOut(),而不是php。

我们

可能认为程序总是交互式的,我们总是可以在发生某些事情时调用某种函数,但 php 不是那样工作的......要理解这一点,您应该更多地了解浏览器/服务器模型。

当有人需要一个php页面,例如index.php时,服务器会根据您提供给它的URL在其磁盘上获取要求并在其磁盘上查找index.php。然后它将整个PHP文件解释为html,并将HTML文档传输到浏览器。所以屏幕前面收到的不再是PHP代码,而是静态HTML文档......

如果你想使页面具有交互性,请将javaScript插入到你的网页中,javascript以纯文本形式转换为浏览器,它在浏览器中工作,而不是在服务器上工作。

所以一个网站同时使用JS和PHP,PHP是用来处理服务器端的工作,比如查询数据库和管理整个网站......JavaScript 适用于页面。

所以如果你想以交互方式更改或删除cookie,你需要的是javascript,你可以在javascript中声明一个"logOut()"函数,并用它控制cookie。或者如果你真的想用 PHP 控制 cookie,使用 js 将命令通过 ajax 传递给某个 PHP 文件,并在 PHP 中删除 cookie。

好的,我有一个奇怪但有效的解决方案来解决这个问题。问题是你不能调用 php 函数,true,但你可以通过向表单添加一个值为"whatever"的隐藏输入框来调用 POST 到 PHP,然后使用按钮的 onclick 事件将该值更改为类似"cut"的东西。然后在调用 POST 方法时检查键 = "cut" 的值。您可能无法通过此过程将值更改回"notCut",但如果您足够有创意,您可以设置一个计时器,每隔一段时间将值更改回"notCut"......自己测试了这个,效果很好!

<?php 
 if (array_key_exists('cutter', $_POST)) {
            if ($_POST["cutter"] == 'cut') {
            setcookie("yourCookie", "cookie", time() - 60 * 60);
            echo "You ate the cookie!";
        }
        }
?>
    <form method="post">
        <input type="text" id="cutter" name="cutter" value="NOTcut" hidden="true">
        <input id='cutter' type="submit" value="Cookie Cutter" onclick="document.getElementById('cutter').value='cut'">
    </form>