【问题标题】:Why isn't my session variable being passed to popup?为什么我的会话变量没有传递给弹出窗口?
【发布时间】:2013-09-23 11:43:58
【问题描述】:

我对此进行了大量研究并发现了一个类似的问题(请参阅Passing variable to the new popup window),但我仍然无法将会话变量传递给弹出窗口。简而言之,我正在尝试将一个基本的 cmets 弹出框合并到我的网站中,以便用户可以在查看主页的不同部分时发布 cmets。我有一个主页(home.php),用户从该主页单击指向弹出窗口的链接。请注意,对于页面的每个其他方面,home.php 上的会话变量都可以正常工作。用户点击 home.php 上的 cmets 弹框打开 usercmets.php 如下(弹框打开没问题,后面是 home.php 的相关代码):

<?php session_start();

include 'connect.php';

$_SESSION['login_id'];
$_SESSION['user'];

**$AjaxUser** = $_SESSION['user']; //All bolded text only added here for clarity

?>

//Lots of code

<div id="commentsbox"<?php echo "<a     
href='http://www.website.com/usercomments.php?id=".**$AjaxUser**."'    
onclick=\"wopen('http://www.website.com/usercomments.php', 'popupname',   
'width=600,height=600,scrollbars');return false;\"><img src=\"images/comments.png\"   
style=\"float:right; margin-right:5px\" height=\"22\" width=\"22\"></a>";?></div>

我认为 $AjaxUser 被传递给 usercmets.php 有错吗?在弹出的 usercmets.php 中,用户发表了一条显示没有问题的评论。但是,用户名不会与帖子一起显示(注意:当将类似代码合并到网站上的现有页面中而不是作为弹出窗口时,发布者的用户名会正确显示......更多证据表明会话变量不传递给弹出窗口)。这是 usercmets.php 的 php 和 AJAX 代码:

<?php session_start();

include 'connect.php'; 

$_GET['$AjaxUser'];

$user=$_GET['$AjaxUser'];

?>
//lots of code
function ajaxFunction(){
var ajaxRequest;  

try{
    // Opera 8.0+, Firefox, Safari
    ajaxRequest = new XMLHttpRequest();
} catch (e){
    // Internet Explorer Browsers
    try{
        ajaxRequest = new ActiveXObject("Msxml2.XMLHTTP");
    } catch (e) {
        try{
            ajaxRequest = new ActiveXObject("Microsoft.XMLHTTP");
        } catch (e){

            alert("Problem encountered");
            return false;
        }
    }
}

ajaxRequest.onreadystatechange = function(){
    if(ajaxRequest.readyState == 4){

                    var ajaxDisplay = document.getElementById('ajaxDiv');
        ajaxDisplay.innerHTML = ajaxRequest.responseText;
    }
}

    var user = "<**?php echo $user;** ?>";
    var usercomment = document.getElementById('usercomment').value;


var queryString = "?usercomment=" + usercomment + "&user" + user;
ajaxRequest.open("GET", "AJAX_test.php" + queryString, true);
    ajaxRequest.send(null); 

或者是我尝试获取 $AjaxUser 的方式有问题,甚至是我在上面的 AJAX 代码中分配 var 用户的方式有问题吗?我的猜测是 $AjaxUser 甚至没有从 home.php 传递,因为当我将 $user 输入到 usercmets.php 中的 cmets 字段时,如下所示:

 <input type='text' id='usercomment' value='<?php echo $user ?>' />

输入字段为空白。非常感谢任何帮助,因为我是 AJAX 新手!

【问题讨论】:

  • 在会话中要注意的一点是确保您在同一个域中。例如:如果你在 www.domain.com 上设置了变量,那么你在 php 文件中的 header 正在返回你到 domain.com,你的 session 信息不会被翻译,你需要将 header 发送到 www.domain.com。检查您的代码以确保不是这种情况。我在上面看到你在一个重定向上留下了 http://,所以问题可能是不一致。
  • 谢谢@Gary Hayes....我错误地在 Stack Overflow 上只留下了 http://。我会重新检查我的代码。
  • 当你的 ajax 页面接收并设置会话信息时,它会是这样的: $_SESSION['user'] = $_GET['user'];然后,您将能够在任何具有 session_start(); 的页面上使用该会话变量;在它的顶部。
  • 另外需要注意的是,即使你用Ajax设置了Session变量,在页面重新加载之前,当前页面也不会使用session变量,因为每个加载的页面都是静态的。如果您希望能够在弹出窗口中使用会话信息,请确保在打开新窗口之前完成返回的 ajax 调用。您可能在设置会话之前打开新窗口,因此在加载时它不可用。 (但如果是这种情况,它将在后续加载中可用)
  • 嗨@Gary Hayes...我正在仔细阅读您的帖子以尝试了解有关此主题的更多信息,因为我对 php 还比较陌生(6 周)...感谢您提供的重要信息。

标签: javascript php ajax session popup


【解决方案1】:

您没有正确使用$_GET['variable']$_GET是PHP根据?this=that&amp;thisother=another等URL参数定义的。

$_SESSION 变量独立存在,无论您调用session_start(); 都可以访问

试试吧……

$user = $_SESSION['user'];

而不是 ajax 页面上的所有其他声明。确保包括 session_start();也在该页面的顶部。

最后,我没有看到您将任何内容分配给 $_SESSION['user'],因此请确保您为该变量分配了一些内容,例如 id 或您尝试使用的任何内容。

如果您坚持使用$_GET 参数传递此信息。 ?id 部分是您要在另一页上引用的键。所以不是$_GET['**$AjaxUser**'],而是$_GET['id']

【讨论】:

    猜你喜欢
    • 2013-02-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-26
    相关资源
    最近更新 更多