2010-07-14 25 views
0

我想建立一个网站,运行时不刷新,使用jquery和PHP来填充滑入/滑出的div。基本工作正常,但我无法传递会话值。2 session_id()在我的网站上的麻烦 - PHP/Jquery

我有一个首先在PHP中捕获“$ user”的登录面板,然后存储为会话变量$ _SESSION ['user']。

然后我可以使用它的第一页OK(第一页被通过的index.php写的。) 后续页的jQuery叫,如:

$(".scrollclick").click(function() { 
var show = this.getAttribute("id"); 
$("#page2content").load("showpage2.php?show="+ show); 
$("#homepagecontent").hide("slide", { direction: "left" }, 1000); 
$("#page2content").css("visibility","visible");   
$("#page2content").show("slide", { direction: "right" }, 1000); 

其中变量“秀”的由来从可点击的div图像名称。再次一切正常。

但是,问题在于,在初始主页加载之后,会话变量与其他加载的PHP页面不同。

我知道使用session_start();在每个PHP脚本的顶部,我用echo'ed session_id()来证明会话正在工作,奇怪的是会话ID不同。

我甚至还有其他脚本在其他脚本中非常高兴地填充了会话变量。

我似乎已经证明,网站上的其他每个PHP脚本都会创建带有SAME会话ID的页面,除了保存不同的主页。麻烦的是,它是主页会话,它包含我想要传播的“用户”变量。

我已经在Chrome,IE和FF中测试过它。全部都一样。结果是两个会话ID - 一个用于主页,另一个用于所有其他用户。

我猜测其他页面中有一些是以某种方式刷新会话,如session_write_close(),但我找不到它。我已经使用一些现成的(伟大的)脚本(jquery聊天,tutorialzine登录演示)创建了该站点,因此他们可能正在玩耍。

我今天刚刚设置了几个做大致相同的事情的虚拟页面,他们工作正常,所以那里有一个真正愚蠢的错误的地方!

可能的解决方法?

我甚至试图找到一种方法来手动传播PHP调用userid,但努力获得变量到Javascript(为jquery调用)[我可以得到这个工作确定],然后回到PHP? user = xxxx字符串,这样我就可以将它返回到另一端。 [不能得到这个工作]

我见过的建议使用一些建议:

var username = <?php echo $user;?>; 

有人建议报价,有些则没有。用引号,它只是被解释为一个字符串,没有它似乎只是停止在其轨道上的JavaScript死亡

有没有人有任何指向会议问题或变量解决方法?

该网站的结构是平的btw,所有(大多数)在一个域中的一个目录。

不胜感激!(谁的人现在浪费3天转圈圈)

TonyJ

+0

从经验来看,session不会被ajax遗留下来,也没有任何我能找到的工作。我很想看看是否有人可以把它关掉。 此外,浏览器无关紧要,因为PHP在服务器上运行 - 无论浏览器是什么,浏览器都会发送相同的信息。 – 2010-07-14 19:36:28

回答

0

PHP会话实现依赖于一个cookie,我的猜测是,浏览器不会沿着饼干传递正确或响应正在缓存并重新使用以前的会话cookie。尝试使用这种禁用缓存:

$.ajax({ 
    url: "...php", 
    cache: false, 
    ... 
}); 

如果您还没有准备好,看AJAX请求与Firebug并检查会话cookie被正确发送。

+0

谢谢,今天早上刚刚尝试过。它仍然在那里。你对cookies的评论很有意思。我清除了所有的cookies并再次尝试。你猜怎么了!我有2个新的ID。真奇怪 ! 我现在要剥开它,拿出几件东西,看看会话的样子。也许聊天模块是一个问题。 无论如何,谢谢。 – TonyJ 2010-07-15 06:36:34

+0

全部修复。我使用的登录模块是在session_start()之前设置会话名称和cookie参数。我之前没有考虑过这件事,但按照你的评论,我转了一下,现在可以正常工作。谢谢!! – TonyJ 2010-07-15 07:26:04

0

我会尝试和调试页面,输入类似于以下内容然后保存它,使用该网站,看看它出现在哪里,只需更改1) - 2,3等,让你看到哪些一个是显示您是否在页面上输入多个。

echo“1) - ”。$ _ SESSION [{yoursessionvariable}];

我会这样做,尤其是在插件调用之前和之后。只要使用该网站,并等待看看它失败的时候。

+0

谢谢。我实际上已经在各个点上显示会话ID和所有会话参数。 (列表($ key,$ val)= each($ _SESSION)){ echo“$ key - > $ val
”; } echo(session_id()); echo“
”; echo(session_name()); 它非常清楚地显示了问题,会话ID在新面板滑入时发生变化。非常奇怪! – TonyJ 2010-07-15 06:32:22