【问题标题】:php setcookie is not working with no errorsphp setcookie 无法正常工作且没有错误
【发布时间】:2019-07-29 21:41:42
【问题描述】:

我正在尝试使用 PHP 设置 cookie。我编写了一个登录脚本,它检查从用户收到的数据与数据库数据,然后如果数据匹配,它会设置一个 cookie 来存储用户名和密码,以便在接下来的两个小时内使用。 这是一个 PHP 脚本,用于处理 HTTP POST 请求并输出 JSON 以用于 React 应用程序。

我在我的代码中使用了 ob 并且我确信在设置 cookie 之前没有发送任何标头。

这就是我的代码的样子。

    <?php
        ob_start();

        function cook($user, $pass, $time){
            setcookie("user", $user, time() + $time, "/", "localhost", 0);
            setcookie("pass", $pass, time() + $time, "/", "localhost", 0);
        }

        header('Content-Type: application/json');

        //login code(receive data, check password, ...)

        cook($user, hash("sha512", $pass), 7200);

        $output = //my code output object

        echo json_encode($output);

        ob_end_flush();

没有错误和异常。

更新:我正在使用跨域请求。我的客户端在 localhost:3000 上,PHP 脚本在 localhost:8080 上运行

【问题讨论】:

  • 文档明确指出“不会发送任何输出(除了标题)”,所以这并不完全正确。在标题前拨打cook
  • 为什么要在 cookie 中存储密码/哈希?
  • 除非浏览器与 Web 服务器在同一台机器上,否则 localhost 将无法工作。这需要是您访问 Web 服务器的域。或者你可以不指定它。
  • 另外,将密码存储在 cookie 中也不是一个好习惯,即使它们已经过哈希处理。
  • @Cue 不工作

标签: php cookies cors setcookie


【解决方案1】:

问题已解决。实际问题来自发布请求。它没有随请求发送凭据。 首先,我坐下来证明是真的。然后更改了一些标头以接受我的 apache 配置中的凭据,如下所示:

Header set Access-Control-Allow-Origin "http://localdev.localdev.com:3000"
Header set Access-Control-Allow-Headers "Content-Type"
Header set Access-Control-Allow-Credentials "true"

注意:正如我在 cmets 中提到的,我还在 /etc/hosts 中为我的 127.0.0.1 添加了一个域。 我知道这不完全是 PHP 问题。但这可能会有所帮助。

【讨论】:

    猜你喜欢
    • 2023-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-17
    • 1970-01-01
    相关资源
    最近更新 更多