这个 PHP $_COOKIE 代码片段有什么问题?

What's wrong with this PHP $_COOKIE code snippet?

我有一个 input='text' name='fileName' 元素并想将其值存储在 cookie filename 中。首次创建时,cookie filename 被分配默认常量 DEFAULT_FILE_NAME 如果请求变量 fileName 已设置(通过 POST 方法),则 cookie filename 被分配此请求变量的值。否则,cookie 将保留其旧值。 .我尝试使用以下代码片段来做到这一点:

    if (!isset($_COOKIE['filename'])) {
        setcookie('filename', DEFAULT_FILE_NAME);
        $_COOKIE['filename'] = DEFAULT_FILE_NAME;
    } 
    if (isset($_REQUEST['fileName'])) {
        setcookie('filename', $_REQUEST['fileName']);
        $_COOKIE['filename'] = $_REQUEST['fileName'];
    } 

问题是当没有设置请求变量fileName时,cookie被识别为不存在,并重新赋值DEFAULT_FILE_NAME。出了什么问题?


我有一个表单和三个作为主菜单的提交按钮。如果单击 Submit #1,那么我将绘制 UI 以指定文件名('fileName' 元素)。用户输入文件名并单击确定,然后将其分配给 cookie 'filename',因为文件名在整个应用程序中使用。 (当然,当用户点击 Submit #1 并且 cookie 'filename' 已经设置时,我将其值写入 'fileName' 元素。)。当我在提交 #1 创建的 UI 中并且 'fileName' 元素可见时,一切正常并且 cookie 成功 set/read。但是,当我单击提交 #2 时,它为另一个需求绘制了 UI,但使用了 cookie 'filename',这就是问题出现的时候。我发现 cookie 'filename' 丢失了从 'fileName' 元素读取的值,并再次分配了默认值。

PHP.net:

Once the cookies have been set, they can be accessed on the next page load with the $_COOKIE or $HTTP_COOKIE_VARS arrays. Note, superglobals such as $_COOKIE became available in PHP 4.1.0. Cookie values also exist in $_REQUEST.

试试这个:

if (!isset($_COOKIE['filename'])) {setcookie('filename')}

if (isset($_REQUEST['fileName'])) {
    setcookie('filename', $_REQUEST['fileName']);
}
else{
     setcookie('filename', DEFAULT_FILE_NAME);
}

更新: 也许是这样的:

if (!isset($_COOKIE['filename'])) {setcookie('filename'),DEFAULT_FILE_NAME,time()+3600);}

if (isset($_REQUEST['fileName'])) {setcookie('filename', $_REQUEST['fileName'],time()+3600);}