CMS变得简单:会话在页面视图之间重置


CMS Made Simple: Session getting reset between page views

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

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

问题是,每当页面在重新触发后加载时,会话仅包含以下三个变量:

  • CMSUSERKEY
  • cms_admin_user_id
  • cms_admin_username

。我的人都消失了。

  • 我在我的 php 脚本中调用 session_start((;
  • 我已经设置了配置选项:$config['use_smarty_php_tags'] = true;

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

任何人都可以建议我没有做/做错的任何事情吗?

谢谢富

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

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

我遇到了类似的问题(尽管我想在另一个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,如果您使用其他版本,此解决方案可能不起作用。