2011-05-04 74 views
3

我们修复了浏览器遇到的问题,无法通过添加以下代码行来登录子域。为什么我的会话随机不会保存?

ini_set('session.cookie_domain', '.'.get_domain('http://'.$_SERVER['SERVER_NAME'])); 

get_domain函数获取站点的域名,以便“sub.sub.domain.com”将返回“domain.com”。我们预先安排了一个“。”这样我们的会话在所有子域名中都是很好的。

该固定不能够的问题上登录,但现在的问题是,自从我们加入这行代码,我们将随机无法登录,因为会话没有创建,只是空值。

我说随机,因为我无法弄清楚是什么原因造成的。有一天用户可以登录,他们会尝试在第二天登录,但它不起作用。清除cookie通常可以解决问题。任何想法我可能做错了什么?我尝试过使用Google搜索,但没有找到任何帮助,我们的用户感到沮丧,而且我的想法已经枯竭。任何帮助真的很感激。

回答

0

原来我已经忘记在其中一个标题中改变这个设置,而这个标题是把所有东西都扔掉了。

(对不起,回答我的问题,多达投票大家的帮助)

1

清除cookie通常会解决问题。

看起来像是有一个缓存问题,但这只是一个假设。

从您的描述中,很难判断问题出在浏览器端还是服务器端。

我可以给你的最好建议是在登录表单上实现cookie测试。在用户实际输入他/她的凭据之前,您需要设置一个测试cookie并将其重定向到同一页面,并附带test获取参数。如果使用此附加test参数请求该页面,则会检查该测试Cookie是否成功设置。

只有当测试通过时才允许登录。否则,请提供错误信息并通知用户有关技术问题。

这可能会帮助您确定问题实际发生的时间。此外,您甚至可以从服务器端添加更多信息,以防出现可能帮助您调试问题的错误。

+0

我使用的会话cookie,并通过set_cookie功能没有手动设置cookie。你是说我应该看看在登录之前是否可以创建一个cookie?我不太了解你的GET测试建议。 – Gazillion 2011-05-04 16:25:05

+0

该测试仅用于测试设置Cookie是否有效,并且只有在设置Cookie时才提供登录表单才能起作用。要测试是否可以设置cookie,您需要设置cookie,使浏览器执行额外请求,并在该额外请求中检查cookie是否已设置。测试cookie是另一个cookie,然后是会话cookie。你是否设置了更多其他饼干? – hakre 2011-05-04 20:05:28

+0

谢谢,但事实证明,我忘记了在我的一个标头中进行更改。我很尴尬。 – Gazillion 2011-05-09 13:39:59

1

只是为了排除这种可能,请尽量以恒定的字符串get_domain()是这样设置的域名,而不是获得它:

ini_set('session.cookie_domain', '.foo.com'); 

在浏览器中一个很好看的Cookie,都对.foo.com任何设置旧的可能会设置(或正在设置)sub.foo.com

我看过一些类似于您所描述的问题,因为某些cookie在不同的服务器上不可见。问题是sub.foo.com可能有一个cookie条目已经定义,你没有删除,只有它才能看到它。由于www.foo.com无法看到sub.foo.com cookie,所以在.foo.com上的www.foo.com上设置了新Cookie。

我希望这是有道理的...

+0

所以你认为www.foo.com可能看不到sub.foo.com的cookies?我试图在硬编码价值之前弄清楚我正在寻找什么,因为我们目前有约45个网站运行这个登录脚本,并且都使用不同的域名。对这个值进行硬编码可以锁定每个人(这意味着我可能不得不在下班时间内完成它)) – Gazillion 2011-05-04 16:22:26

+0

嗯,事实证明,我忘记了在我的标题(* facepalm *)之一中进行更改,这导致了问题依赖你来自哪里。 – Gazillion 2011-05-09 13:39:26