【问题标题】:Why php session var that is set has been lost after redirect by javascript为什么设置的 php session var 在通过 javascript 重定向后丢失
【发布时间】:2015-06-20 20:38:35
【问题描述】:

我有两个页面,分别是 skytrip.localhost/searchresults 和 skytrip.localhost/bookingInfo

在页面 searchresults 中,我发出 ajax 请求,然后它被重定向到页面 bookingInfo。在 ajax 请求中,我设置了一个会话值,然后我想在页面 bookingInfo 中获取这个值。但我无法得到这个值。当我转储 $_SESSION 时,我看到此值未设置,并且属于此值的会话 var 不存在,但已看到其他以前的会话值。

ajax请求调用php代码并设置session值

 $session->set(Fly_Constant::SESSION_BOOK_PRICE_VERIFIED_SOLUTION_PARAMETER, "yunuz");

响应后,跳转到bookingInfo页面

window.location.href = PageInitialData.BASE_URL +"bookingInfo";

我试图得到这个值

$bookPriceVerifyResponse = $session->get(Fly_Constant::SESSION_BOOK_PRICE_VERIFIED_SOLUTION_PARAMETER,1800);

【问题讨论】:

  • 你使用的是哪个 CI 版本?
  • 我不知道 CI3 但关于 CI2.x 的会话有问题且不安全(它使用 cookie 来保存会话数据)所以我改用这个会话扩展并且它做得很好@ 987654321@希望有帮助
  • 我不使用 codeigniter 会话。我在会话助手中使用 $_SESSION
  • 那么如果您向我们展示可能有帮助的会话助手
  • 非常感谢您的关注。问题不是会话助手。当我看到以前的会话值时,我看不到在重定向之前设置的会话变量/值。虽然我在重定向之前在 $_SESSION 中看到了这个值,但在重定向之后,我在 $_SESSION 中看不到这个值。

标签: php ajax codeigniter session


【解决方案1】:

如果你不使用框架会话机制,请确保你在使用$_SESSION之前调用了session_start(),否则这个数据会丢失。

【讨论】:

  • 非常感谢您的关注。当我看到以前的会话值时,我看不到在重定向之前设置的会话变量/值。虽然我在重定向之前在 $_SESSION 中看到了这个值,但在重定向之后,我在 $_SESSION 中看不到这个值。
  • 试试答案,你就会明白。您需要调用 session_start() 以使 PHP 在页面之间加载和保存会话信息。没有它,脚本一结束,S_SESSION 就会消失。
  • 是的,我找到了问题所在。问题是如果未设置 $_SESSION ,我会调用 session_start 。但是在将此值设置为会话之前,我已经在其他函数中调用了 session_write_close。在这种情况下,会话不存在并且 $_SESSION 不是空的。因为 session 不存在,所以会出现这个问题。为了解决这个问题,我在 session_status() !== PHP_SESSION_ACTIVE 时调用 session_start()。
【解决方案2】:

如果我没记错的话,在你的重定向中尝试完整的 URL 和相对 url,这也会影响 SESSION。

【讨论】:

    猜你喜欢
    • 2014-03-23
    • 1970-01-01
    • 2013-06-19
    • 1970-01-01
    相关资源
    最近更新 更多