【问题标题】:How to set cross domain cookies though curl or any method?如何通过 curl 或任何方法设置跨域 cookie?
【发布时间】:2015-03-29 00:21:34
【问题描述】:

我有两个网站。我想通过 curl 请求在另一个域上设置 cookie。

我正在从我的第一个网站发出 curl 请求。 以下是代码结构:

$url = 'http://www.secondwebsite.com/ext/access/api/manage.php';
$data = array('id' => '23',
    "firstname" => "First name",
    "lastname" => "last name",
    "email" => "email@gmail.com",
    'username' => 'username',
    'password' => 'password123',
    'action' => 'add',
    'authkey' => '12345tgtgtt');
$ch = curl_init($url);
$data_string = urlencode(json_encode($data));
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, false); 
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, array("customer" => $data_string));

$result = curl_exec($ch);
curl_close($ch);    
$result = json_decode($result);

manage.php(代码结构)

setcookie('username', $_POST['username'], time() + (86400 * 30), "/"); // 86400 = 1 day
setcookie('password', $_POST['password'], time() + (86400 * 30), "/"); // 86400 = 1 day

但是没有为 www.secondwebsite.com 设置 cookie。 还有其他方法可以设置跨域cookie吗? 实际上我想在两个网站之间开发 SSO(单点登录)功能。我希望如果任何用户登录 firstwebsite.com,那么用户将自动登录 secondwebsite.com。

php 中是否有任何实现 SSO 功能的方法?请分享..

【问题讨论】:

  • 你不能。想象一下,如果nastysite.ru 可以为您的onlinebank.com 操作(设置/读取/更改/删除)cookie,会发生什么?

标签: php curl cookies cross-domain setcookie


【解决方案1】:

您可以在php中使用Access-Control方法来启用跨域的Cookie和Session。

将此代码保存到 php 文件中

header("Access-Control-Allow-Origin: http://example.com");
header("Access-Control-Allow-Credentials: true");
header("Access-Control-Allow-Methods: GET, POST,OPTIONS");
header("Access-Control-Allow-Headers: Content-Type, *");

那么你必须通过ajax请求来请求这个文件。

$.ajax(..... 

    crossDomain: true,
            xhrFields: {
              withCredentials: true
            },
...);

请求域的 Cookie 和 Session 将由您的请求域控制。Cookie 和会话数据也将在您的同一浏览器中...

【讨论】:

    【解决方案2】:

    您不能在域之间共享 cookie。想象一下会话窃取和其他类似的东西。

    有很多关于创建 SSO 的网站,例如http://merbist.com/2012/04/04/building-and-implementing-a-single-sign-on-solution/ 这是来自 google 的第一个。

    【讨论】:

      猜你喜欢
      • 2017-06-09
      • 2011-08-25
      • 2020-06-21
      • 1970-01-01
      • 2015-10-17
      • 1970-01-01
      • 2017-10-06
      • 2012-06-17
      • 2011-05-16
      相关资源
      最近更新 更多