【问题标题】:session variable lost between pages页面之间的会话变量丢失
【发布时间】:2012-06-15 19:20:41
【问题描述】:

我有 3 个 .php 文件:

index.php

<?php
session_start();

if (isset($_SESSION['comp_id']))
{
    require_once 'scan_albums.php';
}
else
{
    require_once 'login.php';
}

echo "SESSION['comp_id']=" .$_SESSION['comp_id'];
?>

scan_ablums.php

<?php
session_start();
if (!isset($_SESSION["comp_id"]))
{
    header('Location: index.php');
}
//...
?>

登录.php

<?php
session_start();
if (isset($_SESSION['comp_id']))
{
    header('Location: index.php');
}
$_SESSION['comp_id'] = 3;
?>

我通过 ajax 调用 login.php:

$.ajax(
{
  type: 'POST',
  url: 'login.php',
  data: {'login': login, 'password': hpass},
  success: function(data)
  {
    console.log("ajax: [comp_id]=" + data + "\n");
    window.location = "index.php";
  }
});

重定向到我的 index.php 后 $_SESSION['comp_id'] 为空。我在这里做错了什么? 提前致谢。

编辑:忘记提及这些页面位于社交网络的 iframe 应用程序中。也许这就是问题所在?

编辑:问题肯定出在 iframe 中。我的本地机器上的会话很好。任何想法如何解决它?

【问题讨论】:

    标签: php ajax session


    【解决方案1】:

    请咨询您的托管服务提供商,了解他们的 PHP 配置详情,特别是它如何处理 session 数据。

    最好将他们的 php.ini 配置与您的本地(工作)配置进行比较。检查 session 部分。

    【讨论】:

      【解决方案2】:

      http://pt2.php.net/manual/en/function.session-write-close.php

      尝试调用 session_write_close();完成“登录”后

      检查页面中的 session_id 是否都相等。

      另见:

      当 session.use_trans_sid 启用时, session_start() 函数 将为 URL 重写注册一个内部输出处理程序。

      在 session_start 中

      【讨论】:

      • 我发现由于浏览器安全策略,会话没有被存储。浏览器就是不允许在 iframe 中设置会话变量。
      【解决方案3】:

      你必须调用 session_start();在使用会话的每个页面的开头。

      【讨论】:

      • 是的,我做到了。我得到的只是会话已经开始的警告。变量仍然是空的。
      • login.phpscan_albums.php 没有 session_start()
      • @Mike 比我快 12 秒!
      • 会话已在 index.php 中启动。但是我的意思是即使我将 session_start() 添加到每个文件中也没有任何变化。 PHP 只给我关于它已经开始的警告。变量仍为空。
      • 向每个文件添加了 session_start() 以清除它。 $_SESSION['comp_id'] 是一个空字符串。
      猜你喜欢
      • 2023-03-30
      • 1970-01-01
      • 2011-06-02
      • 2011-12-15
      • 2019-04-04
      • 2016-07-02
      • 1970-01-01
      • 2023-03-24
      相关资源
      最近更新 更多