无法在laravel中设置cookie

时间:2015-03-18 04:48:36

标签: javascript php laravel cookies laravel-4

我使用Laravel 4来开发我的应用程序。但我在设置cookie时遇到了一些问题。以下是app/routes.php中的一些代码:

Route::get('/', function(){
    // Set a cookie before a response has been created ??
    Cookie::queue('test0', '123', 10);

    $app = App::getFacadeApplication();
    $version = $app::VERSION;

    //Creating Custom Responses
    $response = Response::make("<html><body>
        Version: $version <br/>
        <script type=\"text/javascript\">
            document.write(document.cookie);
        </script>
        </body></html>", 200);

    $response->withCookie(Cookie::make('test1', '0123', 10));

    //Queue after response created
    Cookie::queue('test2', '123', 10);
    Cookie::queue('test3', '123', 10);
    setcookie('test4', '123', time() + 60*10);

    return $response->withCookie(Cookie::make('test5', '0123', 10));
});

但是当我运行此代码时,它并没有设置所有值。这是我的结果: result

只有php内置函数有效, 任何其他功能,例如Cookie::queuewithCookie对我来说都不起作用,但在Cookies set by this page弹出窗口中,如上图所示,它仍然具有所有Cookie值
那么,这里的问题是什么?
为什么test2的值不是'123' ???

1 个答案:

答案 0 :(得分:4)

这是因为您设置的Cookie为HttpOnly cookie

  

HttpOnly cookies只能在通过HTTP传输时使用(或   HTTPS)。它们无法通过非HTTP API访问,例如   JavaScript的。这种限制减轻了,但并没有消除   通过跨站点脚本(XSS)威胁会话cookie被盗。   大多数现代浏览器都支持HttpOnly cookie。

Cookie::make()方法有七个参数。您可以在laravel中将httpOnly(默认为true)设置为false。

Cookie::make($name, $value, $minutes, $path, $domain, $secure, $httpOnly);

修改

在laravel中,为了安全起见,cookie值会自动使用密钥加密,该密钥在app/config/app.php中设置。要获得您想要做的事情,您需要遵循以下两种方式:

只需在php中使用传统的setCookie方法。

setcookie($name, $value, $expire, $path, $host, $secure, $httpOnly);

否则,您可以使用这种棘手的方式。 Accessing unencrypted cookies

希望它对你有用。