使用 ajax 设置子域的会话

Set the session of subdomain using ajax

我正在使用像 www.example.com 这样的域和像 sub.example.com 这样的子域。

我正在尝试调用 sub.example.com 的 Login 函数。 最后我无法设置 sub.example.com 的会话以供将来调用的函数使用。

我在我的子域中使用 CodeIgniter,我的根域只有一个 HTML 页面和原生 JavaScript。我想使用 sub.example.com 作为我所有子网站的端点。

我尝试将我的子域 (CI) 的配置更改为

$config['cookie_prefix']    = "";
$config['cookie_domain']    = ".example.com";
$config['cookie_path']      = "/";
$config['cookie_secure']    = FALSE;

还有我的 www.example.com 的 index.php 文件到:

session_set_cookie_params(0, '/', '.example.com');
session_start();

codeigniter 中,您不需要 session_start();。只需加载 session 库,然后尝试。

将会话库加载为:

$this->load->library('session');//from models,controllers and view..

但是如果你在模型、视图和控制器之外..加载CI session库如下:

1.First 创建 CI

的实例
$this->CI =& get_instance();

2.Then 加载库

$this->CI->load->library('session');

更多内容请看这里https://codeigniter.com/userguide3/libraries/sessions.html#destroying-a-session

我根据要求

使用Angular$httpProvider设置header("Access-Control-Allow-Credentials: true");[服务器端]和$http.defaults.withCredentials = true;[客户端]解决了我的问题

并且不要忘记设置 header("Access-Control-Allow-Origin: www.example.com");[服务器端] 我的根域以访问我的子域。

但是如果你有多个domains/sub-domains允许你可以使用下面的代码

$http_origin = $_SERVER['HTTP_ORIGIN'];

if ($http_origin == "http://www.domain1.com" || $http_origin == "http://www.domain2.com" || $http_origin == "http://www.domain3.info")
{  
    header("Access-Control-Allow-Origin: $http_origin");
}

了解更多信息Access-control-allow-credentials