【问题标题】:CMS Made Simple: Session getting reset between page viewsCMS 变得简单:在页面视图之间重置会话
【发布时间】:2023-03-13 03:12:01
【问题描述】:

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

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

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

谢谢, 丰富

【问题讨论】:

  • 我曾经遇到过类似的问题(我现在又遇到了),我认为这个问题是由于 CMS Made Simple 没有与您的常规 PHP 共享会话造成的。

标签: php session smarty cmsmadesimple


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    我也遇到过类似的问题(尽管我想在另一个 php 文件中使用来自 CMS Made Simple 会话的数据)。对我来说,原因如下(如我对问题的评论所述):

    CMS Made Simple(CMS 从现在开始)确实有自己的会话名称。这意味着当您在单独的 php 文件中运行 session_start() 时,它不会具有相同的会话名称。因此,php-file 将无法访问 CMS 的 session 数据,CMS 将无法访问 php-file 的 session 数据。

    解决方案在逻辑上遵循原因,您需要它们都使用相同的会话名称。 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,如果您使用其他版本,此解决方案可能无法正常工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-30
      • 2016-01-28
      • 2012-06-15
      • 2017-01-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多