【问题标题】:setcookie doesn't work in PHP from a page to another onesetcookie 在 PHP 中从一个页面到另一个页面不起作用
【发布时间】:2020-10-02 00:53:45
【问题描述】:

早安, 我是一名大学生,我正在尝试做一个关于 PHP 的基本练习,特别是我正在尝试设置一个值为 IT 的 cookie(国家)。 任务是打开页面a,然后点击链接“pagina successiva”(英文下一页)。浏览器将打开页面 b,该页面应读取 cookie Country 的值并可视化(如果存在)。 在教授的要求中,写着我不必设置过期时间。 这是我的页面a代码:

<?php
    $value = 'IT';
    setcookie('Country',$value, 0, "", "", TRUE);
?>
<!doctype html>
<html lang="it">
    <head>
        <meta charset="utf-8">
        <title>Esercizio 10.1 pagina A</title>
        <meta name="author" content="Pippo Baudo" >
        <link rel="stylesheet" type="text/css" href="../sol10_css/lab10_style.css"> 
    </head>
    <body>
        <h1>Esercizio 10.1a</h1>
        <p>Italia!</p>
        <p><a href='10_1b.php'>Pagina successiva</a></p>
    </body>
</html>

这是我的b页代码:

<!doctype html>
<html lang="it">
    <head>
        <meta charset="utf-8">
        <title>Esercizio 10.1b</title>
        <meta name="author" content="Pippo Baudo" >
        <link rel="stylesheet" type="text/css" href="../sol10_css/lab10_style.css">
    </head>
    <body>
        <h1>Esercizio 10.1 pagina B</h1>
        <?php
            if(isset($_COOKIE["Country"])){
                $nazione = $_COOKIE["Country"];
                echo"<p>Il valore del cookie COUNTRY &egrave; $nazione </p>";}
            else{
                 echo"<p class='err'> ERRORE: Cookie \"Country\" assente</p>";
                 echo"<p><a href='10_1a.php'>Pagina precedente</a></p>";}
        ?>
</body>
</html>

页面b上的输出说cookie没有设置,所以不存在。

我不知道我做错了什么。谁能帮帮我?

编辑:当我打开页面 a 时出现的错误是:Parse error: syntax error, unexpected 'setcookie' (T_STRING) in /app/lab10/10_1/10_1a.php on line 3

【问题讨论】:

  • 检查您的日志,看看您是否收到来自setcookie() 行的警告Headers already sent
  • $value = 'IT' 缺少结尾 ;
  • 我已经编辑了错误的问题。看来我在基本语法上搞砸了
  • @kerbh0lz 我已经更正了,谢谢。但是现在页面 b 告诉我 cookie Country 不存在。于是b页的php代码进入到了else中

标签: php html cookies setcookie


【解决方案1】:

我假设您尝试使用不安全的 (http) 连接访问您的网页,但提供了 TRUE 作为最后一个参数,这意味着:

安全: 表示 cookie只能通过 来自客户端的安全 HTTPS 连接。当设置为TRUE 时, 只有存在安全连接时才会设置 cookie。在 服务器端,仅由程序员发送此类 cookie 关于安全连接(例如关于$_SERVER["HTTPS"])。

来自 PHP 手册 (https://www.php.net/manual/en/function.setcookie.php)

如果您尝试setcookie('Country', $value, 0, '', '', FALSE); 或只是setcookie('Country', $value, 0); 将保留默认值,它应该可以工作。或者,您可以使用https 访问您的页面。

我会进一步建议使用像 EditThisCookie(用于 Google Chrome)这样的浏览器插件来测试和分析 cookie 相关问题:https://chrome.google.com/webstore/detail/editthiscookie/fngmhnnpilhplaeedifhccceomclgfbg

【讨论】:

  • 有效!非常感谢。关于https的问题我已经解开了,但是你知道如何设置安全通道吗?大学为我提供了服务器,我可以在其中上传 HTML、PHP、CSS 文件并进行处理...如何建立 HTTPS 而不是 HTTP?
  • 您可以通过将页面调用为https://yourpage.com/your_path 而不是http://yourpage.com/your_path 来检查是否为此维护了有效的证书。这将告诉浏览器尝试建立安全连接。如果这可行,您可以使用例如将您的页面永久重定向到https。此 SO 帖子的回复:stackoverflow.com/questions/4398951/…
  • 非常感谢。服务器告诉我无法建立安全连接。不过我明白。非常感谢,我在旅游解释中已经很清楚了。
  • 如果你想尝试并在本地开发,我可以推荐 XAMPP (apachefriends.org/de/index.html)。它是免费的,可在 Windows/Mac/Linux 上运行,并且非常易于安装。在那里,您可以使用一些设置,而无需依赖其他人完成的正确服务器配置。
猜你喜欢
  • 1970-01-01
  • 2012-08-07
  • 1970-01-01
  • 1970-01-01
  • 2011-04-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多