【问题标题】:cakephp (1.3) - accessing session vars in viewscakephp (1.3) - 在视图中访问会话变量
【发布时间】:2010-08-05 14:21:34
【问题描述】:

如果我在 page.ctp 中执行 print_r($_SESSION),我会得到:

Array
(
    [Config] => Array
        (
            [userAgent] => b3346028c15f82ac5d4b25c4f50d8718
            [time] => 1281034201
            [timeout] => 100
        )

    [manualLogout] => 1
    [Message] => Array
        (
        )

    [Auth] => Array
        (
            [redirect] => /events/add/controller:events
        )

    [facebookSynced] => 1
)

我使用 $this->Session-write() 在我的控制器中设置的 var facebookSynced - 并且它在会话中正如预期的那样。但是当我从 page.ctp 执行 pr($this->Session) 或 pr($session) 时,我得到:

SessionHelper Object
(
    [helpers] => Array
        (
        )

    [__active] => 1
    [valid] => 
    [error] => 
    [_userAgent] => b3346028c15f82ac5d4b25c4f50d8718
    [path] => /
    [lastError] => 
    [security] => medium
    [time] => 1281016202
    [sessionTime] => 1281034202
    [watchKeys] => Array
        (
        )

    [id] => 
    [host] => 
    [timeout] => 
    [base] => /Eclipse/Calc_1.3.2/trunk
    [webroot] => /Eclipse/Calc_1.3.2/trunk/
    [here] => /Eclipse/Calc_1.3.2/trunk/users/login
    [params] => Array
        (
            [controller] => users
            [action] => login
            [named] => Array
                (
                )

            [pass] => Array
                (
                )

            [plugin] => 
            [form] => Array
                (
                )

            [url] => Array
                (
                    [url] => users/login
                )

            [models] => Array
                (
                    [0] => User
                )

        )

    [action] => login
    [data] => 
    [theme] => 
    [plugin] => 
)

如何使用其中的 facebookSynced var 访问我的会话,以及这两个“会话”之间的区别。额外信息:在 core.php 我有:

Configure::write('Session.save', 'php');
Configure::write('Session.cookie', 'CAKEPHP');
Configure::write('Session.save', 'custom_sesh');
Configure::write('Session.timeout', '180');
Configure::write('Session.checkAgent', true);
Configure::write('Session.start', true);

custom_sesh 的内容只有一行:

ini_set('session.cookie_lifetime', 0);

【问题讨论】:

  • 提示:使用 debug($this) 而不是 print_r 有时你不记得你把它放在哪里了.. 找到它需要很多时间.. 使用 debug.. 在输出中它给你行号和文件名也......它在那里并且很好地利用它:D

标签: cakephp cakephp-1.3


【解决方案1】:

print_r($_SESSION) 的第一个结果是实际会话变量的值列表。

pr($this->Session) 的第二个结果显示了 CakePHP 的 Session 助手对象的内容。

两者是完全不同的东西。如果您想访问会话变量 facebookSynced 的值,您可能需要执行以下操作:

$foo = $_SESSION["facebookSynced"];

【讨论】:

  • 虽然这可行,但如果您想保持在框架内,我建议您使用 DavidYell 的解决方案。但要为绝对正确投赞成票。
  • 是的,我正试图留在框架中——就像我向大卫推荐的那样——我无法通过 $session 或 $this->Session 获取变量——我认为它应该在那里.. .你有什么想法吗?
【解决方案2】:

在您看来,您应该使用会话助手。

echo $session->read('Key.value');

您在控制器中写过类似的东西,

$this->Session->write('Key.value','example');

【讨论】:

  • 我想要的 var 不在 $session 中(或在 $this->Session 中),请参阅我的问题中 SessioHelper 的 pr() 转储,但它在 $_SESSION - 这就是为什么我我很困惑。
  • 我的意思是,您必须使用 Cake 助手将其写入会话中,以便它可以用于蛋糕。如果您想坚持使用该框架,这就是您需要的方法。还要在 app/config 中检查您的会话正在被存储,以及您的安全设置
  • 我认为会话助手存储并读入 php $_SESSION (假设这是在 core.php 中设置的方法)我错了吗? nukefusion(上图)说“两者是完全不同的东西”......?
  • 是的,但是 Cake 会将你的变量放在会话中的其他位置,所以虽然你可能称它为“foo”,但它可能不是 $_SESSION['foo'] 专门
【解决方案3】:

如果你正在使用

$this->Session->write('facebookSynced',true);

在您的控制器中,

只需使用

$foo = $this->Session->read('facebookSynced'); 

在视图中。

就这么简单! :)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-05
    相关资源
    最近更新 更多