使用ajax设置子域的会话

时间:2017-01-10 06:12:25

标签: php codeigniter session subdomain

我使用 www.example.com 等域名和 sub.example.com 等子域名。

我试图调用sub.example.com的Login函数。 最后,我无法设置sub.example.com的会话以便将来调用函数。

我在我的子域中使用CodeIgniter,而我的根域只有一个包含本机JavaScript的HTML页面。我想使用 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();

2 个答案:

答案 0 :(得分:0)

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

将会话库加载为:

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

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

1.首先创建CI的实例

$this->CI =& get_instance();

2.然后加载库

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

有关详情,请参阅此处https://codeigniter.com/userguide3/libraries/sessions.html#destroying-a-session

答案 1 :(得分:0)

我根据请求使用Angular header("Access-Control-Allow-Credentials: true");设置$http.defaults.withCredentials = true; [SERVER-SIDE]和$httpProvider [CLIENT-SIDE]解决了我的问题

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

但如果您有多个域/子域,则可以使用以下代码

$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