从主域访问子域会话

时间:2015-06-11 07:18:39

标签: php codeigniter session

我在mydomain.com上有一个应用程序。我希望用户在登录 mydomain.com 时会被重定向到 example.mydomain.com ,但会话在 example.mydomain.com <目录中成功生成< / em>的。现在我的问题是在提交登录后,用户无法登录 example.mydomain.com 。虽然有会话文件可用。

会话驱动程序是文件(mydoman.com配置文件)

$config['sess_driver'] = 'files';
$config['sess_cookie_name'] = 'ci_session';
$config['sess_expiration'] = 0;
$config['sess_save_path'] = 'mydir/application/session_data';
$config['sess_match_ip'] = FALSE;
$config['sess_time_to_update'] = 0;
$config['sess_regenerate_destroy'] = FALSE;

我的应用程序在本地服务器上正常工作。但不是在生产中工作。

2 个答案:

答案 0 :(得分:1)

您还必须在配置文件中设置cookie_domaincookie prefix,如下所示

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

答案 1 :(得分:0)

您应该在登录操作中执行此操作:

session_set_cookie_params($ cookieParams [&#34; life&#34;],$ cookieParams [&#34; path&#34;],$ rootDomain,$ secure,$ httponly)或类似内容。

重点是如何设置$ rootDomain。例如,您将example.com作为主域。你需要做的是:

  1. 如果cookie仅在主域中使用,则将其设置为example.com。
  2. 将其设置为.example.com(带点),以便在所有子域上显示Cookie。
  3. 现在关于主域和子域的session_name():

    1. 如果它们不同,则从主域创建的会话对于子域是可见的,但反之亦然。只能从主域注销,但不能从子域注销。

    2. 如果它们相同,则从主域创建的会话对于子域是可见的,反之亦然。注销可以从主域或子域完成。