2012-05-23 59 views
7

在我們的網站上的一個頁面,我有這樣的代碼:PHP會話變量沒有得到設置

$_SESSION['returnURL'] = "/store/checkout/onepage"; 

進一步回落,這個按鈕控制:

<button type="button" title="Register Today" class="button" onclick="window.location = '/register/';" id="BecomeMember"><span><span>Become a Member Today</span></span></button> 

現在,在寄存器中的模板,我有這樣的代碼:

<input type="hidden" name="returnURL" id="returnURL" value="<?php if(isset($_SESSION['returnURL'])) { echo $_SESSION['returnURL']; } else { echo '/'; } ?>" /> 

但它只顯示值爲/。

發生了什麼可能導致這種情況?

+1

session_start()在別處被調用。 – MB34

+0

我在註冊模板中打印出$ _SESSION數組,它是一個空數組。 – MB34

+0

是否在上述頁面中包含te註冊模板或者變量是否正確傳遞?什麼是您的模板代碼 – Ray

回答

0

我最終什麼事做將派遣變量後的頁面工作。 ExpressionEngine和Magento之間的會話差異使得使用會話變量以及cookie成爲令人望而卻步的事情。

9

first.php

<?php 
session_start(); 
$_SESSION['returnURL'] = "/store/checkout/onepage"; 
echo '<a href="second.php">Pass session to another page</a>'; 
?> 

second.php

<?php 
session_start(); 
echo 'returnURL = ' . $_SESSION['returnURL']; 
?> 

所以你需要寫在這兩個文件

+0

如果我將session_start()放在這個文件中,我得到了Session已經啓動的警告。 – MB34

+0

您需要更詳細地描述腳本的結構:啓動哪個文件會話,如何移動到其他文件等等。我寫的代碼只是一般的方法。 – DaneSoul

+0

請參閱原始帖子中的評論。 – MB34

1

session_start()爲了解決這個問題,你將需要:

1)確保在開始時調用session_start()腳本,在任何其他之前。

2)什麼都不是不安$_SESSION$_SESSION['returnURL']

+0

如果我將session_start()放在這個文件中,我得到了Session已經啓動的警告。 – MB34

+0

輸出緩衝將解決該問題 – Ray

+0

無法做到,請在原始帖子中查看評論。 – MB34

0

我能得到這個像這樣

session_start(); 
$returnurl = "/store/checkout/onepage"; 
$_SESSION['returnURL'] = $returnurl;   
+0

這正是DaneSoul所做的。 – MB34

0

我只是資金我有同樣的問題,會話在firefox中工作正常,但不是鉻,我創建了一個測試腳本,只創建一個會話,然後打印出session_id()以查看它是否是創建與否,在運行這個腳本後,我注意到session_id()會在每次頁面加載時發生變化,並且php會對未設置的日期/時間發出警告。然後,我添加了

date_default_timezone_set('America/Los_Angeles');

到腳本的開始,這使得在每次頁面加載時生成一個新的session_id()並修復了問題。 (可能值得注意的是,我的問題似乎只出現在我的子域而不是頂級域)

0

我工作的服務器已滿,因此會話沒有工作,因爲沒有空間商店價值。確保你的服務器有空間。

+0

這個問題已經有了一個可以接受的答案。 –

0

我見過很多CMS和框架有不同的處理常規會話的方式。如果上述基本雙線程不起作用(因爲它干擾了當前的軟件),您仍然可以使用cookie來實現相同的功能。請記住,在關閉瀏覽器時Cookie不會被刪除,因此您需要明確告訴它什麼時候釋放變量(使用未設置)。

$_COOKIE["something"] = 'value'; 
echo $_COOKIE["something"]; 
unset($_COOKIE["something"]);