使用PHP存储临时变量?

时间:2014-03-10 10:31:08

标签: php

好的,在我的网站上,我有很多针对Twitch的嵌入式页面。在所有嵌入下面,我还有一个授权流程,以便人们可以登录Twitch并单击一个关注按钮。

通常,流程将从:mydomain.com/channel/name开始,在流程结束时,它们将返回mydomain.com/auth。最初,我有它,以便使用javascript将起始URL存储在浏览器会话存储中;然后当他们到达最终的auth端点时,我会使用javascript并拉出会话存储并将它们重新定位回原始URL。

这一直很有效...但是,我在我的网站上的一个功能是能够使用自定义规范网址代理我的网站上的频道。因此,有人可以使用theirdomain.com代理mydomain.com/channel/them

这会产生会话存储的问题,因为会话存储遵循跨域限制。它们从theirdomain.com开始,到mydomain.com/auth结束。由于域不匹配,我无法访问会话存储以将其转发回原始URL。

我正在使用PHP,所以我想知道解决这个问题的最佳方法是什么。我认为不是将起始URL存储在会话存储中,我可以使用AJAX将其保存到临时存储,使用PHP链接到它们的IP地址。但是,我不知道该怎么做。

PHP是否有某种具有可定义TTL的临时存储系统?这也适用于多个域? (它将是同一台服务器)

1 个答案:

答案 0 :(得分:0)

如果请求被代理到同一个应用程序,则会话可以访问,它只是会话标识符(存储在cookie中,因此是跨域问题)导致问题。

您可以做的是将会话标识符从一个域通过转换传递到另一个域,作为get请求的一部分,因此当您执行从theirdomain.comexample.com的跳跃时,请执行此操作使用格式为http://example.com/blah/?session_id=[session_id_from cookie]的链接(理想情况下使用https)。

然后在example.com上抓取session_id并使用它在该域的cookie中设置session_id,它将从源域加载会话。

这可以用于会话劫持,但是可以将你的session_id放在cookie中,所以通常可以这样做,尽管使用https端点可以提高安全性。