在JS中读取CakePHP Cookie值

时间:2013-11-22 19:47:28

标签: javascript php cakephp cookies

我的所有CakePHP页面上的请求标头中都发送了一个cookie。见到这里: A cookie

我的问题是如何从Javascript中获取该值? document.cookie返回''

示例请求标头(这是第一个,发送以获取页面):

GET /pages/view_media HTTP/1.1
Host: 192.168.1.11
Connection: keep-alive
Cache-Control: max-age=0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
User-Agent: Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.57 Safari/537.36
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8,fr-CA;q=0.6,fr;q=0.4
Cookie: CAKEPHP=n0r405fi68i395qhaa4luse8v6

编辑:CakePHP版本为2.4.1

或者,如果有办法从标题中获取CAKEPHP=n0r405fi68i395qhaa4luse8v6值也可以。我只需要价值。

3 个答案:

答案 0 :(得分:3)

Cookie正在与HTTP-Only flag一起发送,因此无法访问JavaScript。

为JavaScript提供Cookie

看起来你所展示的是会话cookie,所以你必须适当地更改会话配置,特别是session.cookie_httponly选项:

Configure::write('Session', array(
    'defaults' => 'php',
    'ini' => array(
        // ...
        'session.cookie_httponly' => false
    )
));

对于常规Cookie,您可以使用Cookie组件httpOnly选项:

public $components = array(
    // ...
    'Cookie' => array(
        // ...
        'httpOnly' => false
    )
);

或财产:

public function beforeFilter() {
    parent::beforeFilter();
    // ...
    $this->Cookie->httpOnly = false;
}

安全隐患

禁用HTTP-Only标志应使其正常工作,但请确保您了解安全隐患!非HTTP-Only cookie很容易通过XSS被盗,因此最好在您的控制器中读取cookie并将这些值仅传递给您真正需要的视图。

另见

答案 1 :(得分:0)

readCookie('CAKEPHP');

function readCookie(name) {
    var nameEQ = name + "=";
    var ca = document.cookie.split(';');
    for(var i=0;i < ca.length;i++) {
        var c = ca[i];
        while (c.charAt(0)==' ') c = c.substring(1,c.length);
        if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
    }
    return null;
}

答案 2 :(得分:0)

另一个不涉及额外安全问题的解决方案是:

使用Cookie组件读取控制器中的cookie,将结果分配给变量并进行设置,以便您可以从视图中访问该变量。

$myVar = $this->Cookie->read('User.name');
$this->set(compact('myVar'));

然后,在您的视图中,您将可以访问$ myVar。

您甚至可以使用JsHelper::set将变量传递给JavaScript。