Php 在一个响应中设置并检查Cookie-Laravel
我正在尝试设置cookie,然后检查cookie是否已设置 在一个函数中,我让它制作cookies:Php 在一个响应中设置并检查Cookie-Laravel,php,laravel,cookies,laravel-4,Php,Laravel,Cookies,Laravel 4,我正在尝试设置cookie,然后检查cookie是否已设置 在一个函数中,我让它制作cookies: public function makeCookies(){ Cookie::queue('logged_in', $value, 15); Cookie::queue('user_id', 2); //return Response::make()->withCookie(Cookie::make('logged_in', $value, 15))->wit
public function makeCookies(){
Cookie::queue('logged_in', $value, 15);
Cookie::queue('user_id', 2);
//return Response::make()->withCookie(Cookie::make('logged_in', $value, 15))->withCookie(Cookie::forever('user_id', 2));
}
在另一个函数中,我尝试检查cookie是否已设置:
public function checkCookies(){
$this->makeCookies();
if(Cookie::get('logged_in') && Cookie::get('user_id')){
return 'Logged In!';
}
}
但是,唯一可行的方法是在$this->makeCookies()之前添加“return”;然而,我希望能够得到下面的条件。我有什么办法可以这样做吗?非常感谢您的帮助。要了解Cookie创建/读取过程:
queued()
在内存中检索cookie。因此,您应该能够做到:
public function checkCookies(){
$this->makeCookies();
$loggedIn = Cookie::get('logged_in') ?: Cookie::queued('logged_in');
$userId = Cookie::get('user_id') ?: Cookie::queued('user_id');
if( $loggedIn && $userId ){
return 'Logged In!';
}
}
安全问题(不直接回答问题)
你的问题只是关于饼干的,所以我只回答了这些。然而,现在我正在看你的代码,我觉得如果我不向碰巧正在读这篇文章的人指出这一点,那就太失职了。这可能只是一个“如何”为自己,而不是生产代码,但该代码可能是非常危险的,如果它曾经公开
确保您不信任存储在cookie中的用户id来确定通过cookie进入的用户。如果你相信这一点,而我来到你的网站,我可以将我的cookie修改为我想要的任何用户id,并进入其他人的帐户
一般安全规则:
cookie应该包含GUID或类似的随机字符串来标识会话。此随机字符串应足够长(例如,32个字符或更大,IMHO),以便有人不容易强行劫持会话
用户id应该存储在$会话(或laravel的会话包装器,如果适用)中,这样用户就没有任何权限访问用户id来修改它
在普通PHP中,登录页面类似这样:
session_start();
if( isValidPassword($_POST['username'], $_POST['password']) ) {
$_SESSION['user_id'] = $user->Id;
}
else {
die('invalid login credentials');
}
session\u start()
方法会自动为用户生成一个带有该长随机字符串的cookie(因此您甚至不必担心该部分)
在后续页面中,您只需检查会话用户\u id即可知道谁已登录:
session_start();
if( empty($_SESSION['user_id']) ) {
die('You are not logged in and cannot access this page');
}
根据Laravel的文档进行必要的更改,如果他们有自己的会话包装器,我敢肯定他们的最佳实践中有很好的文档记录。要了解Cookie创建/读取过程:
queued()
在内存中检索cookie。因此,您应该能够做到:
public function checkCookies(){
$this->makeCookies();
$loggedIn = Cookie::get('logged_in') ?: Cookie::queued('logged_in');
$userId = Cookie::get('user_id') ?: Cookie::queued('user_id');
if( $loggedIn && $userId ){
return 'Logged In!';
}
}
安全问题(不直接回答问题)
你的问题只是关于饼干的,所以我只回答了这些。然而,现在我正在看你的代码,我觉得如果我不向碰巧正在读这篇文章的人指出这一点,那就太失职了。这可能只是一个“如何”为自己,而不是生产代码,但该代码可能是非常危险的,如果它曾经公开
确保您不信任存储在cookie中的用户id来确定通过cookie进入的用户。如果你相信这一点,而我来到你的网站,我可以将我的cookie修改为我想要的任何用户id,并进入其他人的帐户
一般安全规则:
cookie应该包含GUID或类似的随机字符串来标识会话。此随机字符串应足够长(例如,32个字符或更大,IMHO),以便有人不容易强行劫持会话
用户id应存储在$会话(或laravel的会话包装器,如果适用)中,以便用户无权访问要成为会话的用户id