PHP setcookie不工作

PHP setcookie不工作,php,Php,我知道有相当多的线程处理这个问题,但每个问题似乎都是独特的(或如此…) 我在设置cookie时遇到问题,以便以后可以根据cookie验证用户 一个php新手…这里可能有什么问题? 我已经检查了php.ini文件,允许使用cookies <?php $capt_error = ""; $already_made_post = ""; $mismatch = ""; $name = $message = ""; if ($_SERVER["REQUEST_METHOD"] == "POST")


我知道有相当多的线程处理这个问题,但每个问题似乎都是独特的(或如此…)
我在设置cookie时遇到问题,以便以后可以根据cookie验证用户
一个php新手…这里可能有什么问题? 我已经检查了php.ini文件,允许使用cookies

<?php
$capt_error = "";
$already_made_post = "";
$mismatch = "";
$name = $message = "";
if ($_SERVER["REQUEST_METHOD"] == "POST") {
    session_start();
    if (empty($_POST["capt"])) {
        $capt_error = "Fältet är obligatoriskt.";
    } else {
        // validate captcha
        if($_POST['capt'] != $_SESSION['rand']) {
            $name = $_POST["name"];
            $message = $_POST['message'];
            $mismatch = "Inmatningen av CAPTHA är fel. Vänligen prova igen.";
        }
        else {
            $ip_address = $_SERVER['REMOTE_ADDR'];
            $time_stamp = date('Y-m-d H:i');
            $cookie_name = $_POST['name'];
            $cookie_value = $ip_address;

            // write to file but only if cookie is not set
            if(isset($_COOKIE[$cookie_value]) && $_COOKIE[$cookie_value] == $cookie_value) {
                $already_made_post = "Du har redan ett inlägg i gästboken!";
            }
            else {
                $data = "\n" . $_POST['name'] . ',' . $_POST['message'] . ',' . $ip_address . ',' . $time_stamp;
                $ret = file_put_contents('data.txt', $data, FILE_APPEND | LOCK_EX);
                if ($ret == false) {
                    die('Fel vid skrivning till fil. Skrivrättigheter saknas');
                }

                // set cookie
                setcookie($cookie_name, $cookie_value); // IS NOT SET
                if(!isset($_COOKIE[$cookie_name])) {
                    echo "Cookie named '" . $cookie_name . "' is not set!";
                } else {
                    echo "Cookie '" . $cookie_name . "' is set!<br>";
                    echo "Value is: " . $_COOKIE[$cookie_name];
                }
            }
        }
    }
}
?>

<link rel="stylesheet" href="labb1.css" type="text/css">

<html>
    <head>
        <title>Labb 1</title>
    </head>
    <body>
        <h1 class="title">Laboration 1 - Gästboken</h1>
        <table border="1">
            <thead>
            <tr>
                <th colspan="3" class="table-title">Min Gästbok</th>
            </tr>
            </thead>
            <tbody>
                <tr>
                    <td class="bold">FRÅN</td>
                    <td class="bold">INLÄGG</td>
                    <td class="bold">LOGGNING</td>
                </tr>
                <?php
                    // open file
                    $f = fopen("data.txt", "r");
                    // while not end of file
                    while (!feof($f)) {
                        // split values with -
                        $arr = explode(",", trim(fgets($f), "\r\n"));
                        print "<tr>";
                            print "<td>$arr[0]</td>";
                            print "<td>$arr[1]</td>";
                            print "<td>IP: $arr[2]<br>TID: $arr[3]</td>";
                        print "</tr>";
                    }
                ?>
            </tbody>
        </table>

        <form action="" method="post">
            <div class="border">
                <div>
                    <span>Namn:</span>
                    <input type="text" name="name" value="<?php echo $name;?>">
                </div>
                <div>
                    <span>Meddelande:</span>
                    <textarea name="message" rows="5"><?php echo $message;?></textarea>
                </div>
                <div>
                    <?php
                        $rand = substr(str_shuffle(str_repeat("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz", 5)), 0, 5);
                        session_start();
                        $_SESSION["rand"] = $rand;
                        print "<span>CAPTCHA skriv detta i rutan nedan: </span> <span class='red bold'>$rand</span>"
                    ?>
                    <span class="error">* <?php echo $capt_error; ?></span>
                    <input type="text" name="capt">
                    <span class="error"><?php echo $mismatch?></span>
                </div>
                <div>
                    <input type="submit" value="Skicka">
                </div>
                <div>
                    <span class="red">*</span> är ett obligatoriskt fält
                </div>
                <div>
                    <span class="error"><?php echo $already_made_post?></span>
                </div>
            </div>
        </form>
    </body>
</html>

会话启动()应位于页面顶部,以便会话正常工作。在上面的代码中,只有当用户提交表单时才会调用它。将其移到第2行。

您尚未设置仪表:

像这样设置您的cookies

$expire=time()+60*60*24*30; 
setcookie ("name","value", $expire,"/");

$expire变量保存cookie到期的时间值,

我阅读了您的代码,现在我看到了这一点

setcookie($cookie_name, $cookie_value); // IS NOT SET
if(!isset($_COOKIE[$cookie_name])) {

Cookie在下一次加载 cookie应在以下时间内可见


你能在没有任何条件的情况下设置cookie吗?您知道如何在浏览器中签出cookie吗?您所说的“无条件设置cookie”是什么意思?我不太明白你的意思:)创建的cookie看起来是这样的:数组([mona]=>::1[PHPSESSID]=>2KBH59RM008EPVLV73QHDFH6[sam]=>::1[sammy]=>::1)你需要分离两件事:我的cookie不工作,我的状况不好谢谢你的回复。但是如何设置cookie呢?您没有在set_cookies()函数中设置过期时间,因此cookie设置不正确