如何通过jquery ajax创建cookie或会话?

时间:2016-10-01 19:34:40

标签: php jquery ajax session cookies

我正在尝试为在线聊天构建自己的JavaScript API。此API旨在获取css文件和javascript文件,并在加载网站后,它必须创建一个对话窗口。我想为其他用户分享此API。

e.g。如果我的域名是mydomain.com并且在html代码中包含我的javascript API,它从example.com下载css文件和javascript文件,那么在用户端创建cookie或会话的最佳做法是什么?

以下是我的API:

<div id="fb-dialog"></div>
<script async defer src="http://coders.localhost/api/fb-dialog.js">

var apiConf = {

  key: 'YOUR_API_KEY',
  language: {

    /* Your language codes and default greeting */

    "pl" : "Dzień dobry, jestem online. W czym mogę pomóc?",
    "en" : "Hello, I'm online. How can I help you?"

    }

  }

</script>

我想分享这个聊天,但任何对话都必须保存在我的服务器上。 我想使用一个数据库,该数据库将在其上安装API的网站ID。在开始使用cookie进行对话之前,我想获取网站ID,我可以在哪里返回响应。我该怎么办?

我的javascript:

<script>

$.ajax({
    xhrFields: {
        withCredentials: true
    },
    type: "GET",
    url: "http://coders.localhost/modules/fb-dialog/heading.php"
}).done(function (data) {
   alert("OK");
});

</script>

我的PHP脚本:

<?php

if (!isset($_SERVER['HTTP_ORIGIN'])) {
    // This is not cross-domain request
    exit;
}

$wildcard = false; // Set $wildcard to TRUE if you do not plan to check or limit the domains
$credentials = true; // Set $credentials to TRUE if expects credential requests (Cookies, Authentication, SSL certificates)
$allowedOrigins = array('http://firma.localhost', 'http://jsfiddle.net');

if (!in_array($_SERVER['HTTP_ORIGIN'], $allowedOrigins) && !$wildcard) {
    // Origin is not allowed
    exit;
}

$origin = $wildcard && !$credentials ? '*' : $_SERVER['HTTP_ORIGIN'];

header("Access-Control-Allow-Origin: " . $origin);

if ($credentials) {
    header("Access-Control-Allow-Credentials: true");
}

header("Access-Control-Allow-Methods: POST, GET, OPTIONS");
header("Access-Control-Allow-Headers: Origin");
header('P3P: CP="CAO PSA OUR"'); // Makes IE to support cookies

// Handling the Preflight
if ($_SERVER['REQUEST_METHOD'] == 'OPTIONS') { 
    exit;
}

if(!isset($_COOKIE['fb-dialog'])) {
    setcookie("fb-dialog", "true", time()+3600, "/");
}else{

  if(!isset($_POST['data'])) {

    if($_COOKIE['fb-dialog'] == 'true') {
    setcookie('fb-dialog', 'false', 0, '/');
    } else {
   setcookie("fb-dialog", "true", time()+3600, "/");
    }
  }
}

// Response
header("Content-Type: application/json; charset=utf-8");
echo json_encode(array('status' => 'OK'));

?>

以上代码正常运行。我获得了状态200,但cookie不适用于正确的域,因为该脚本为域编码器创建了一个cookie。本地主机

我有两个域名:

http://firma.localhost - 这是我的网站

http://coders.localhost - 这是我获得API的远程域

我想通过coders.localhost域为firma.localhost创建cookie。

2 个答案:

答案 0 :(得分:0)

您也可以使用普通的javascript:

document.cookie = "username=admin";

var x = document.cookie;

答案 1 :(得分:0)

可能您已经找到答案了,如果您分享解决方法,那就太好了。 我认为问题可能是由于您在/

中的setcookie配置

您的配置: setcookie("fb-dialog", "true", time()+3600, "/");

尝试一下: setcookie("fb-dialog", "true", time()+3600, "http://coders.localhost");