CMS简化:在页面视图之间重置会话

时间:2011-07-14 21:01:01

标签: php session smarty cmsmadesimple

我在模板中有一个表单,该表单发布到PHP脚本。此脚本在$ _SESSION数组中设置一些变量,然后使用标准重定向回同一页面:

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

问题是每当重定向后加载页面时,会话只包含以下三个变量:

  • cmsuserkey
  • cms_admin_user_id
  • cms_admin_username

......我的全部都消失了。

  • 我正在调用session_start();在我的PHP脚本
  • 我设置了配置选项:$ config ['use_smarty_php_tags'] = true;

用户无需登录即可使用该表单(实际上该站点根本不使用登录)。

任何人都可以提出任何我不做/做错的事吗?

谢谢, 富

2 个答案:

答案 0 :(得分:2)

我遇到了同样的问题并在重定向后通过addin exit()修复了它以保存会话:

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

答案 1 :(得分: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,如果您使用其他版本,此解决方案可能无法使用。