Php 我的饼干怎么了?

Php 我的饼干怎么了?,php,cookies,Php,Cookies,出于某些原因,此php脚本不会回显我的cookie变量: <?php require 'connection.php'; require 'variables.php'; $name = $_POST['name']; $pass = $_POST['pass']; if(($name == $admin_name) && ($pass == $admin_pass)){ setcookie($forum_url.

出于某些原因,此php脚本不会回显我的cookie变量:

<?php
    require 'connection.php';
    require 'variables.php';

    $name = $_POST['name'];
    $pass = $_POST['pass'];

    if(($name == $admin_name) && ($pass == $admin_pass)){
        setcookie($forum_url."name",$name,time()+604800);
        setcookie($forum_url."pass",$pass,time()+604800);
    }

    else
        echo 'Failed';
?>

下面是发送到admin_login.php的html

<form method=post action=admin_login.php>
            <div id="formdiv">
                <div class="fieldtext1">Name</div>
                <div class="fieldtext1">Pass</div> 
                <input type="text" name=name size=25 /> 
                <input type="password" name=pass size=25 />
            </div>
            <input type=submit value="Submit" id="submitbutton">
        </form>

名称
通过
这是索引,我想在这里回显信息

<?php echo $_COOKIE[$forum_url."name"]; ?>


我做错了什么?

确保为cookie设置了路径

如果在一个路径中设置cookie,但试图从不同的路径获取cookie,则它将不起作用


你能告诉我索引的URL和cookie的设置位置吗

您是否在尝试吐出特定COOKIE值时尝试了
var\u dump($\u COOKIE)
?在设置cookie或尝试回显其值时,
$forum\u url
是否可能尚未定义?可能cookie被设置为
name
pass
,因为
$forum\u url
为空。

调用
setcookie()
时,还可以通过断言返回
false
来检查头是否尚未发送。设置cookie发生在HTTP头中,因此请确保在生成任何输出之前进行设置

例如:

<?php require 'connection.php'; require 'variables.php'; ?>
<h1>Hello world!</h1>
<?php setcookie($forum_url."name",$name,time()+604800); ?>

你好,世界!

将不起作用,因为在调用
setcookie()
时,输出已经传递到HTTP正文。

实际上,我设置了一个快速测试,发现当存储cookie时,它会用下划线替换句点。因此,如果你有一个像www.test.comname这样的域名,它就会变成www\u test\u comname。因此,在引用cookie时,您需要执行以下操作:

<?php
    $forum_url = preg_replace('/\./','_',$forum_url);
    echo $_COOKIE[$forum_url."name"];
?>
<?php
    require 'connection.php';
    require 'variables.php';

    $name = $_POST['name'];
    $pass = $_POST['pass'];

    $tmp_name_path = $forum_url."name";
    $tmp_pass_path = $forum_url."pass"

    if(($name == $admin_name) && ($pass == $admin_pass)){
        setcookie($tmp_name_path,$name,time()+604800);
        setcookie($tmp_pass_path,$pass,time()+604800);
    }

    else
        echo 'Failed';
?>



PHP是否有可能在连接$forum_url.“name”和$forum_url.“pass”时遇到问题,以使setcookie正常工作

试着这样做:

<?php
    $forum_url = preg_replace('/\./','_',$forum_url);
    echo $_COOKIE[$forum_url."name"];
?>
<?php
    require 'connection.php';
    require 'variables.php';

    $name = $_POST['name'];
    $pass = $_POST['pass'];

    $tmp_name_path = $forum_url."name";
    $tmp_pass_path = $forum_url."pass"

    if(($name == $admin_name) && ($pass == $admin_pass)){
        setcookie($tmp_name_path,$name,time()+604800);
        setcookie($tmp_pass_path,$pass,time()+604800);
    }

    else
        echo 'Failed';
?>


假设您在索引页上包含定义
$forum\u url
的文件,并且您已经检查了cookie是否已被设置。这不是对您问题的回答,但您所做的是非常危险的。您正在将该用户的密码以明文形式存储在其浏览器缓存中。要添加到@Pekka的声明中:有一次,我在一个网站上查找我的cookie,发现我的密码以明文形式存储在cookie中。我对这个网站非常非常不满意。这不仅很危险,而且会让那些知道自己在做什么的人对你的网站失去大量的信任。设置cookie时以及您试图打印出实际cookie时的“name”。您可以查看是否正确地为数组编制索引。使用Firebug之类的工具查看发送和接收的实际HTTP头,以缩小问题是否与代码有关,或者浏览器是否未按您希望的方式处理cookie。它们设置在同一域和子域中