【问题标题】:Read session written in webroot in cakephp 2 pages controller在 cakephp 2 页面控制器中读取用 webroot 编写的会话
【发布时间】:2014-04-08 20:42:11
【问题描述】:

我有一个位于 app/webroot/myscript/antispam.php 中的脚本

代码就像

@session_start();
$_SESSION['my_anti_spam'] = 'myantispam';

但是当我尝试从 pagescontroller 读取它时,

@session_start();
debug($_SESSION);

它没有任何会话。

我该怎么办?如何从控制器读取写入 webroot 文件夹的会话?

【问题讨论】:

  • 检查是否在 pagescontroller 调用 session_start()
  • @JasonOOO 是的,它有。检查我更新的代码
  • 试试这个:if(session_start()){ $_SESSION['my_anti_spam'] = 'myantispam';} else echo 'session notstarted'
  • @JasonOOO 我把它放在 antispam.php 中,仍然不起作用

标签: php session cakephp cakephp-2.0


【解决方案1】:

Cake 中不需要调用 session start,它会自动调用。

在您的反垃圾邮件脚本中,您将需要这样的内容:

define('DS', DIRECTORY_SEPARATOR);
session_save_path(dirname(dirname(dirname(__FILE__))) . DS . 'tmp' . DS . 'sessions');

session_name('CAKEPHP');

session_start(); 

这假设您将会话存储在 app/tmp/sessions 目录中,即您的 app/Config/core.php 文件中有类似的内容:

Configure::write('Session', array(
    'defaults' => 'cake',
    'timeout' => 6 * 60,    // Timeout in minutes
    'autoRegenerate' => false,
    'ini' => array(
      'session.cookie_secure' => false
    )
));

【讨论】:

    【解决方案2】:

    为什么需要在 webroot 索引文件中设置会话?如果你想在整个项目中使用这个 session,请在 appController beforeFilter 方法中添加 session。

    【讨论】:

      【解决方案3】:

      你可以把它放在你的控制器或视图上:

      $this->Session->write('my_anti_spam', 'myantispam');
      

      然后您可以通过以下方式阅读会话:

      <?php echo $this->Session->read("my_anti_spam");?>
      

      您可以通过以下方式销毁会话:

      $this->Session->delete('my_anti_spam');
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-01-28
        • 1970-01-01
        • 2012-08-28
        • 2014-09-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多