2013-11-22 129 views
0

我想设置一个cookie像laravel:在不同的路线,后来Laravel 4:Cookie没有设置?

$cookie = Cookie::forever('knownWords', serialize($words)); 
       return Response::json(array('status' => "FAIL", 
        "msg" => "Info stored in cookie!"))->headers->setCookie($cookie); 

,然后访问它,并把它作为一个JSON响应,例如:

$words = array(); 
     if(Cookie::has('knownWords')){ 
      $words = unserialize(Cookie::get('knownWords')) 
     } 
     return Response::json(array('status' => "FAIL", 
      "msg" => "Not logged in! Cookie info attached.", 
      "data" => $words));   

我米没有得到任何错误,但我可以确认它没有进入Cookie :: has()if语句。任何想法的家伙?我对饼干相当陌生!如果您需要知道,我正在使用localhost和chrome!

编辑:我通过AJAX

回答

0

所以显然我只是需要使用作曲家来更新Laravel。现在它可以工作。 :D

-2

调用这些路线尝试使用withCookie()。我的意思是,改变这种:

return Response::json(array(
    "status" => "FAIL", 
    "msg" => "Info stored in cookie!" 
))->headers->setCookie($cookie); 

此:

return Response::json(array(
    "status" => "FAIL", 
    "msg" => "Info stored in cookie!" 
))->withCookie($cookie); 

这是我到目前为止,和工作:

<?php // routes.php 

Route::get('/', function() { 
    return View::make('index'); 
}); 

Route::get('set', function() 
{ 
    $words = ['foo', 'bar']; 
    $cookie = Cookie::forever('knownWords', serialize($words)); 
    return Response::json(array('status' => "FAIL", "msg" => "Info stored in cookie!"))->withCookie($cookie); 
}); 

Route::get('see', function() 
{ 
    $words = array(); 

    if(Cookie::has('knownWords')){ 
     $words = unserialize(Cookie::get('knownWords')); 
    } 

    return Response::json(array('status' => "FAIL", 
     "msg" => "Not logged in! Cookie info attached.", 
     "data" => $words)); 
}); 

然后,视图(简单HTML与AJAX呼叫):

<html> 
<head> 
    <meta charset="UTF-8"> 
    <title></title> 
</head> 
<body> 
    <script src="http://code.jquery.com/jquery-1.10.2.min.js"></script> 
    <script> 
     $(function() { 
      $.ajax({ 
       url: '{{ URL::to("set") }}', 
       success: function(response) { 
        console.log(response); 
       } 
      }); 
     }); 
    </script> 
</body> 
</html> 
+0

已经尝试过了,显然Response :: json()不能像其他响应一样工作。 - > headers-> setCookie()是我在寻找解决方案时发现的,但这似乎也不起作用。 withCookie抱怨说这是一个未定义的方法。 – samuraiseoul

+0

嗯,它对我有用。我刚拷贝你的代码,并在它之前添加了'$ words = ['foo','bar'];''。 –

+0

你是通过ajax调用它吗? – samuraiseoul