我在某些点击事件上设置了Cookie。然后在cookie中存储值后,我想
我通过参考Laravel官方文档开发了一个函数。控制台显示已设置cookie。但在那之后,我无法解决视图(Blade Template)中的两点(在上面的列表中提到)。它始终显示(Cookie::get('cookie.clients'))
' null'。但浏览器控制台显示该cookie
。
如果有人知道答案,我们将不胜感激。
这是我的代码。
控制器
use App\Client;
use App\Http\Requests;
use Illuminate\Http\Request;
use Validator;
use App\Http\Controllers\Controller;
use App\Repositories\ClientRepository;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Cookie;
class ClientController extends Controller
{
public function cookieadd(Request $request, Client $client)
{
$clients = [];
if (Cookie::get('cookie.clients') != null)
{
$clients = Cookie::get('cookie.clients');
}
array_push($clients, $client);
Cookie::forever('cookie.clients', $clients);
return redirect('/client');
}
}
查看
@if (Cookie::get('cookie.clients') != null)
<p>cookie is set</p>
@else
<p>cookie isn't set</p>
@endif
答案 0 :(得分:4)
您正在创建一个Cookie对象,但您没有通过回复发送它。
您可以将其直接添加到控制器中的响应中
$cookie = Cookie::forever('cookie.clients', $clients);
return redirect('/client')->withCookie($cookie);
或者您可以对Cookie进行排队并使用AddQueuedCookiesToResponse中间件自动将其添加到响应中。
Cookie::queue(Cookie::forever('cookie.clients', $clients));
return redirect('/client');
答案 1 :(得分:2)
这是另一个观点。
如果我理解正确,您已经使用Javascript在客户端设置cookie,并且您想在服务器端提取它。
Laravel对其cookie进行加密,当您使用$request->cookies()
时,您将获得解密的值,并且从客户端检索Cookie不会通过解密过程,我们会获得null
秒。我想,我还没能找到合适的源代码:)
您仍然可以使用原始PHP $_COOKIE['cookie_clients']
来检索客户端设置的Cookie。请注意,.
已由PHP(as seen on php.net)转换为_
。
或者,您可以将感兴趣的Cookie的名称添加到$except
中的Http/Middleware/EncryptCookies.php
,这样您就可以使用更多Laravel方法$request->cookie()
来提取它。
我确信在这里还有很多其他方法可以解决Laravel,希望如果你不喜欢这两种方法,这可以让你知道在哪里看。祝你好运。
答案 2 :(得分:1)
您是否尝试通过Request对象显示Cookie?
$value = $request->cookie('name');
有关详细信息,请参阅laravel doc:https://laravel.com/docs/5.2/requests#cookies