【发布时间】:2016-11-08 05:05:30
【问题描述】:
我正在尝试实现opAuth login。 php 5.4.45。当我启动我的 php 页面时,我会调用
if(!session_id()) session_start();
在此之后,如果我打印session_id(),它将打印“fsdfoasdiuhf736jf732938f92”(i)
现在我通过 OpAuth 点击 facebook 登录。一切都很好,我正确获取了用户数据,但是在回调页面上,会话 ID 不同。即,如果我打印 session_id(),它将打印一个不同于 (i) 的 id
问题是,现在如果我将用户名保存为 $_SESSION['user'] 并重定向到主页,在主页上,它又回到了原始会话 id (i)。并且用户名没有在那里设置。
所涉及的每个页面,我都会在开始会话之前检查。难道我做错了什么?
更新
我想我对可能发生的事情有所了解。当我调用登录 url 时,有原始会话 id。我将回调 url 传递给这个函数。当 facebook 授权登录并重定向到回调 url 时,可能是 php 将其视为来自 facebook 的请求?这意味着它是一个新会话,因此它会创建一个新会话?与用户使用的不同?然后当php重定向到原始页面时,原始会话又回来了?这有意义吗?如果是这样,我怎样才能保持会话不变?
【问题讨论】:
-
我猜 OpAuth 正在重新生成会话 ID,因为正在进行权限提升。也许,使用
session_id('setnewsidreceivedfromOauth')可以解决它.. -
但是,当我回到主页时,它是如何回到原来的会话ID的?那可能吗?他们使用“会话”作为默认的 callback_transport。我什至将其更改为“发布”,但仍然发生同样的事情。
-
在深入检查 OpAuth 时,如果回调设置为会话,它只会启动新会话。那么它必须是别的东西。您可以将第 229 行
opauth.php替换为您拥有的代码行。不确定这是否“按设计工作”