7

我目前正在从事一个跨越多个领域的项目。我想要的是用户能够登录一个站点并同时登录所有其他站点。

用户会话存储在数据库中,我在每个域上设置的 cookie 都包含会话 ID。

所以基本上当用户登录到 example.com 时,会使用他们的会话 ID 创建一个 cookie,会话数据存储在数据库中。完成此操作后,需要在具有此唯一会话 ID 的所有其他域上创建一个 cookie,以便当用户从一个站点到另一个站点时,他们将自动登录。

现在我找到了一种在 Firefox 中执行此操作的方法(使用在其他域上执行 PHP 脚本的图像标签,本质上是在不同域上创建不同的 cookie)但是这种方法在 IE 中不起作用(没有测试过 Opera 或Safari 等)。

有没有人对我如何让它在 IE 中工作有任何想法?

4

5 回答 5

3

看看我的问题Cross Domain User Tracking

您需要做的是向“图像”添加另一个 HTTP 标头。

如果您在 Internet Explorer 6 中使用 FRAMESET,来自 Session 变量的引用将丢失:

您可以将 P3P 紧凑策略标头添加到您的子内容中,并且您可以声明不会对用户的数据执行任何恶意操作。如果 Internet Explorer 检测到令人满意的策略,则 Internet Explorer 允许设置 cookie。

满足此标准的简单紧凑策略如下:

P3P: CP="CAO PSA OUR"

此代码示例显示您的站点为您提供了对您自己的联系信息 (CAO) 的访问权限,任何分析的数据都只是“伪分析的”,这意味着数据与您的在线角色相关联,而不是与您的物理身份相关联(PSA ),并且您的数据不会提供给任何外部机构供这些机构使用 (OUR)。

如果您在 ASP 页中使用 Response.AddHeader 方法,则可以设置此标头。在 ASP.NET 中,您可以使用 Response.AppendHeader 方法。您可以使用 IIS 管理管理单元 (inetmgr) 添加到静态文件。

按照以下步骤将此标头添加到静态文件:

  1. 单击开始,单击运行,然后键入 inetmgr。
  2. 在左侧导航页面中,单击您的网站中要添加标头的相应文件或目录,右键单击该文件,然后单击“属性”。
  3. 单击 HTTP 标头选项卡。
  4. 在“自定义 HTTP 标头”组框中,单击“添加”。
  5. 键入 P3P 作为标头名称,然后键入 CP=... 作为紧凑策略字符串,其中“...”是您的紧凑策略的相应代码。
于 2008-12-23T14:35:10.753 回答
1

不确定这在您的开发中是否是一个好的建议,但如果您想以“正确”的方式进行操作,您绝对应该查看单点登录。

于 2008-12-23T02:04:01.443 回答
1

只是我,还是听起来像你的 CSRF 使用你的技术使用在 Firefox 中工作的图像?

有趣的方法,尽管我希望你不会在那里面临安全威胁。

于 2008-12-23T14:27:49.443 回答
0

我自己没有这样做,但我认为你走对了。我可能会这样做,除了我会使用 Javascript 文件而不是图像。它将在服务器端生成,并在客户端更新 cookie。

于 2008-12-23T14:20:58.537 回答
-1

可能我有点傻,但你能不能在登录时为每个域名设置cookies?因此,当他们登录到站点 A 时,他们不是只有一个 cookie,而是有五个,或者你有多少个站点?

setcookie(A, $sessid, expire, path, domainA.com);
setcookie(B, $sessid, expire, path, domainB.com);
setcookie(C, $sessid, expire, path, domainC.com);
setcookie(D, $sessid, expire, path, domainD.com);
于 2008-12-23T14:34:18.417 回答