【问题标题】:opauth implementation and and issue with session idopauth 实现和会话 id 问题
【发布时间】: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 替换为您拥有的代码行。不确定这是否“按设计工作”

标签: php session opauth


【解决方案1】:

终于解决了问题。带有登录按钮的实际页面是非 www 页面,登录按钮上有一个 www url。因此,当回调 url 形成时,它默认为 www url。这与非 www url 不同,因此形成了一个新会话。我将所有更改为非 www url,它按预期工作。

【讨论】:

    猜你喜欢
    • 2014-10-02
    • 2015-04-26
    • 2019-02-04
    • 2011-07-07
    • 2012-08-19
    • 1970-01-01
    • 1970-01-01
    • 2017-03-18
    • 2023-03-15
    相关资源
    最近更新 更多