2010-07-14 35 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