2011-07-14 30 views
3

我在發佈到PHP腳本的模板中有一個表單。此腳本設置$ _SESSION數組中的一些變量,然後使用標準重定向回同一頁:CMS製作簡單:會話在頁面瀏覽之間得到重置

header("Location: index.php?page=enquiry-form"); 

的問題是,每當refirection後的頁面加載,會話僅包含以下三個變量:

  • cmsuserkey
  • cms_admin_user_id
  • cms_admin_username

......我的一切都消失了。

  • 我打電話給session_start();在我的PHP腳本
  • 我已經設置了配置選項:$ config ['use_smarty_php_tags'] = true;

用戶無需登錄即可使用表格(實際上該網站根本不使用登錄)。

任何人都可以建議我什麼都不做/做錯了嗎?

感謝, 豐富

+0

我曾經有過類似的問題(我現在再次遇到過),我相信這個問題是由CMS Made Simple造成的,不會與您的常規PHP共享會話。 – Joep

回答

1

我也曾有過類似的問題(儘管我想在另一個php文件中使用來自CMS Made Simple會話的數據)。對我而言,原因如下(如我對該問題的評論所述):

CMS Made Simple(CMS從現在開始)的確會生成自己的會話名稱。這意味着當你在一個單獨的php文件中運行session_start()時,它不會有相同的會話名稱。因此,php文件將無法訪問CMS的會話數據,CMS將無法訪問php文件的會話數據。

該解決方案邏輯上遵循原因,您需要它們都使用相同的會話名稱。 CMS將其會話名稱設置爲include.php,該名稱應位於應用的根文件夾中。

$dirname = dirname(__FILE__); 
... 

$session_key = substr(md5($dirname), 0, 8); 

#Setup session with different id and start it 
@session_name('CMSSESSID' . $session_key); 

所以,在你的PHP文件,您需要(調用session_start();)執行以下操作:

//Substitute the string $dirname for the result of __FILE__ in **include.php**!!! 
$dirname = '/data/web/somefolder/someotherfolder/' 
$session_key = substr(md5($dirname), 0, 8); 
@session_name('CMSSESSID' . $session_key); 
//Now you can call session_start(); 

這樣做可以讓你的PHP文件訪問CMS的會話。如果你使用任何在會話中放入重要數據的插件,你應該小心不要擦除任何數據。

注意:我使用CMS版本1.8.2,如果您使用不同的版本,此解決方案可能無法正常工作。

2

我有同樣的問題,一旦和重定向後固定它通過插件的exit()來保存會話:

header("Location: index.php?page=enquiry-form"); 
exit(); 
+0

我會給它一個去 - 謝謝! –