我正在尝试为在线聊天构建自己的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。
答案 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");