【问题标题】:Passing $_SESSION through an iframe - PHP通过 iframe 传递 $_SESSION - PHP
【发布时间】:2013-09-25 18:49:14
【问题描述】:

作为记录,我确实看到了这个条目 - Passing sessions variables through an iframe, php,它提出了完全相同的问题,但答案(即使我跟着它到了 T)仍然对我不起作用。

我有两个页面 - 一个是目标网页,另一个是通过 iframe 拉入目标网页的页面。我在登录页面上启动会话并为 $_SESSION 分配了一个值,我希望将该值拉入 iframe。

这是我的登录页面代码:

<?php
session_start(); 
    $_SESSION['vendorname'] = $this->getVendorId(); // store session vendor name data
    echo "Vendor = ". $_SESSION['vendorname']; // test to see if the vendor name was properly set
session_write_close();
?>

<html>
  <body>
    ....blah blah...
    <iframe width="100%" src="http://www.somewhere.com/iframe.php"></iframe>
  <body>
</html>

这是 iframe 中页面的代码:

<?php
session_start();
?>  

<html> 
  <head>   
    <link href="css/something.css" type="text/css" rel="stylesheet" /> 
  </head>

 <body>
  <?php
     if(isset($_SESSION['vendorname']) && is_array($_SESSION['vendorname'])) {
       echo "vendor = ". $_SESSION['vendorname']; }
     else {
       echo "Meh, back to the drawing board"; }?>

 </body> 
 </html>

在着陆页上,$_SESSION 正确显示。它通过我们的数据库检索供应商的名称并将其显示在屏幕上。然而,在 iframe 中,它只显示我的失败消息(“嗯,回到绘图板”)。我错过了一些东西。 :(

编辑:

根据 Marc B 的建议,我现在正在检查 session_id()。所以对于这段代码(在登陆页面上):

<?php
session_start();
    echo session_id();
    echo "<br>"; 
    $_SESSION['vendorname'] = $this->getVendorId(); // store session vendor name data
    echo "Vendor = ". $_SESSION['vendorname']; //test to see if the vendorname was properly set
    echo "<br>";
    echo session_id();
session_write_close();
?>

我得到以下输出:

0lq5gb79p52plgd9mcknpife60 供应商 = SUPERVEND 0lq5gb79p52plgd9mcknpife60

在 iframe 页面上,对于此代码:

<?php
session_start();
echo session_id();
?>  

<html> 
      <head>   
        <link href="css/something.css" type="text/css" rel="stylesheet" /> 
      </head>

     <body>
<?php
echo session_id();
if(isset($_SESSION['vendorname'])) {
    echo "vendor = ". $_SESSION['vendorname']; }
else {
    echo "vendor = ". $_SESSION['vendorname']; }
?> 

我得到以下输出:

0lq5gb79p52plgd9mcknpife60 0lq5gb79p52plgd9mcknpife60 供应商 =

【问题讨论】:

  • 检查session_id() 在两个页面中的值是否相同。如果没有,那么您的会话 cookie 设置不正确。
  • 好的,这是一个愚蠢/新手的问题......我该怎么做?
  • session_start(); echo session_id(); 在两个脚本中。显示的值应该相同,并且应该与浏览器中的 PHPSESSID cookie(或任何它的名称)中的内容相匹配。如果该值发生变化,那么您已经建立了多个会话,而您保存这些值的那个会话正在“丢失”。
  • 谢谢!因此, session_id() 是相同的。我在设置 $_SESSION['vendorname'] 之前和之后检查了它,并且在 iframe 内。 ...那么,您还有其他想法为什么会搞砸吗? :(再次感谢。

标签: php session iframe session-variables


【解决方案1】:

使用以下内容启动 iframe:

header('P3P: CP="CAO PSA OUR"');
session_start(); 

然后您应该能够以正常方式访问会话变量。

【讨论】:

  • 你能解释一下这是做什么的吗?
猜你喜欢
  • 2010-12-30
  • 1970-01-01
  • 1970-01-01
  • 2015-12-02
  • 1970-01-01
  • 2021-11-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多