【问题标题】:CakePHP Session without Cookies没有 Cookie 的 CakePHP 会话
【发布时间】:2011-04-10 03:47:30
【问题描述】:

我想制作一个不需要 cookie 但仍有会话的应用程序。因此,我创建了 SessionID 并将其放入 URL 中。我现在的问题是 HTML 帮助程序无法识别这一点,并且输出的所有链接都没有会话 ID。

CakePHP 是否必须被告知这样做,还是没有任何机制可以做到这一点? (在每个链接中获取会话 ID)

【问题讨论】:

    标签: php session cakephp cookies


    【解决方案1】:

    我刚刚在 cakephp 中做了一个 url session 实现,我将 cakephp 设置为使用 trans_sid 而不是 cookies:

    ini_set("session.use_cookies",0);
    ini_set("session.use_trans_sid",1);
    

    这可以使用:http://bakery.cakephp.org/articles/admad/2009/09/02/how-to-bend-cakephp-s-session-handling-to-your-needs 并使用 beforefilter 读取会话 id 表单 url 参数并从中设置会话 id,如果会话 id 未设置为 url 参数则使用 cookie

    // Use sid from post
    if (!empty($this->params['url']['sid'])) {
        $this->Session->id($this->params['url']['sid']);
    }
    // Or failover to cookie
    else
    {
        $this->Session->id($this->Cookie->read('CAKEPHP'));
    }
    

    记得重写AppHelper类中的url函数

    function url($url = null, $full = false) {
        return parent::url($url, $full)."/?sid=".session_id();
    }
    

    并在 AppController 类中重定向和闪烁

    function redirect($url, $status = null, $exit = true) {
        $url = $url."?sid=".session_id();
        return parent::redirect($url, $status, $exit);
    }
    
    function flash($message, $url, $pause = 1, $layout = 'flash') {
        $url = $url."?sid=".session_id();
        return parent::flash($message, $url, $pause, $layout);
    }
    

    【讨论】:

      【解决方案2】:

      这是一个“CakePHP 中还有 PHP”的案例。据我所知,默认的 HtmlHelper 不附加任何会话值,因为 Cake 偏爱 cookie 会话。你可以使用标准的 PHP 工具来改变它。

      首先,您需要customize the cookie handling。详情见这里:How to bend CakePHP's session handling to your needs。然后,您需要决定是使用PHP's trans-sid functionality,还是使用SID constant 作为传输会话ID 的一种方式。如果是后者,您可能需要创建一个自定义 AppHelper::url 方法以自动将其包含在每个链接中。有关类似问题的解决方案,请参见此处:Adding a prefix to every URL in CakePHP

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-07-02
        • 2011-04-14
        • 2012-03-08
        • 1970-01-01
        • 1970-01-01
        • 2012-06-03
        • 1970-01-01
        相关资源
        最近更新 更多