【问题标题】:Ajax post to php. Save cookie and send it back to javascriptAjax 发布到 php。保存 cookie 并将其发送回 javascript
【发布时间】:2015-10-27 13:32:37
【问题描述】:

我通过 ajax POST 向 php 发送数据。我想将它保存在 php cookie 中,然后能够通过 ajax GET 请求在 javascript 中检索它。在 PHP 中,我的 cookie 检查函数返回“cookie ____ is not set”。我做错了什么导致我无法存储我的 cookie,然后检索它。

AJAX 发布

function(config) {
    var config_copy = JSON.parse(JSON.stringify(config));

    //post cookie
    $.ajax({
           url: "php/pivot_cookie.php",
           type: "POST",
           data: config_copy,
           success: function(){ alert("Cookie: success") },
           error: function(data){alert(data);}
     });

}

PHP

$cookie_name = "pivot_config";
$cookie_value = $_POST['config_copy'];
setcookie($cookie_name, $cookie_value, "/");

//cookie check function
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];
}

AJAX 获取 我不知道我在“数据”字段中输入了什么来检索 cookie,所以我可以将它传递给我的其他函数之一

 $(document).ready(function(){
    $.ajax({
          url: "php/pivot_cookie.php",
          type: "GET",
          data: (cookie - I dont know how to get it),
          success: function(){ alert("Cookie Retreival: success") },
          error: function(data){alert("Cookie Retrieval: failure");}
    });
}

【问题讨论】:

  • data 不是$.ajax 的必需选项
  • 又一次。我认为您不了解 cookie 是什么以及 cookie 是如何工作的。 See这整个过程是不必要的,没有意义
  • 在浏览器document.cookie的javascript中设置一个cookie,当页面被发送到服务器时,cookie也会自动发送。当新页面从服务器返回到浏览器时,cookie 也会返回到浏览器。如果您想在服务器上更改它,它会以新状态返回,或者您可以在浏览器上更改它,新值会在下一次往返时返回到服务器。你绝对不需要 jquery 发布这些东西,它根本没有任何意义。

标签: javascript php jquery ajax cookies


【解决方案1】:

您没有在 cookie 上设置正确的过期时间。试试:

setcookie($cookie_name, $cookie_value, time() + 3600, "/"); // expire in 1 hour

see official docs for setcookie

【讨论】:

    【解决方案2】:

    除了不给 PHP setcookie() 提供它想要的第三个参数 您还需要为$.ajax().success() 方法设置一个参数。

    之后,您可以让.success(data) 随意处理data

    注意我传递的 JSON 数据代替了 ajax-post.html 文件中的 data 属性。

    data: {"config_copy": config_copy}
    

    根据您处理的数据,您可以使用 Javascript 检索 cookie 数据。

    在您的网络浏览器控制台中尝试以下操作?设置 cookie 后 (假设您只设置了一个 cookie pivot_config

    escape( document.cookie.split('=').pop() ).replace('+', ' ')
    

    还要注意 cookie 可以存储的数据量是有限的。

    pivot_cookie.php

    $cookie_name = "pivot_config";
    
    if ( isset( $_POST['config_copy'])) {
        $cookie_value = $_POST['config_copy'];
        setcookie($cookie_name, $cookie_value, time()+3600, "/");
    
        //cookie check function
        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];
        }
    }
    else {
      if ( isset( $_COOKIE[$cookie_name] ) ) {
        echo $_COOKIE[$cookie_name];
      }
    }
    

    ajax-post.html

    <html>
    <head>
      <title>getting using ajax</title>
      <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script>
      <script>
      function x (config) {
        var config_copy = JSON.parse(JSON.stringify(config));
    
        //post cookie
        $.ajax({
                url: "pivot_cookie.php",
                type: "POST",
                data: {"config_copy": config_copy},
                success: function(data,b,c){
                  alert("Cookie Retreival: success");
                  $("body").html(data);
                },
                error: function(data){alert(data);}
            });
    
        }
    
        window.addEventListener("load", function () {
            x("hi post");
        });
      </script>
    </head>
    <body>
    </body>
    </html>
    

    ajax-get.html

      <html>
      <head>
        <title>getting using ajax</title>
        <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script>
        <script>
        $(document).ready(function(){
          $.ajax({
              url: "pivot_cookie.php",
              type: "GET",
              data: "(cookie - I dont know how to get it)",
              success: function(data,b,c){
                alert("Cookie Retreival: success");
                $("body").html(data);
              },
              error: function(data){alert("Cookie Retrieval: failure");}
          });
        });
        </script>
      </head>
      <body>
      </body>
      </html>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-30
      • 2011-09-30
      • 1970-01-01
      • 1970-01-01
      • 2011-08-29
      相关资源
      最近更新 更多