3

我在模板中有一个表单,该表单已发布到 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;

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

谁能建议我没有做/做错的事情?

谢谢,丰富

4

2 回答 2

2

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

 header("Location: index.php?page=enquiry-form");
 exit();
于 2011-07-14T21:03:35.537 回答
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,如果您使用其他版本,此解决方案可能无法正常工作。

于 2013-01-04T12:52:49.640 回答