1

我正在尝试使用 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>" ;
    }

    ?>

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

4

3 回答 3

1

如果用户按下注销按钮,此代码将导致用户注销,然后将他们重定向到名为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>" ;
    }

    ?>
于 2012-04-20T12:01:08.343 回答
1

正如你所说的“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,使用js通过ajax将命令传递给某个php文件,并删除php中的cookie。

于 2012-04-20T12:23:48.187 回答
0

好的,我有一个奇怪但有效的解决方案来解决这个问题。问题是您不能调用 php 函数,是的,但是您可以通过向表单添加一个值为“whatever”的隐藏输入框来调用 POST 到 PHP,然后使用按钮的 onclick 事件来更改该值像“cut”这样的东西。然后在调用 POST 方法时检查 key = "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> 
于 2017-11-01T00:41:23.500 回答