我在模板中有一个表单,该表单发布到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,如果您使用其他版本,此解决方案可能不起作用。