laravel - laravel 8中的会话忘记不能处理cookie问题
问题描述
我正在使用 Laravel 8.35.1,因为我无法在我的 Laravel 项目中销毁会话。我也有关于 cookie 设置和删除的问题。我有3个主要功能
index() which returns the basic view which provide basic login form.
logincheck(Request $request) this function check the credentials provided from index() function form
sessionout(Request $request) it logout the current user.
,请帮助提前谢谢。
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Models\Admin;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Redirect;
class CommonController extends Controller
{
public function index()
{
return view('index');
}
public function sessionout(Request $request)
{
$request->session()->forget('adm');
Redirect::route('homepage')->send();
}
public function logincheck(Request $request)
{
$responce=array('status'=>false,'message'=>'Request not valid');
if(!empty($request->username)&&!empty($request->password))
{
$admin=DB::table('admin')->where('username',$request->username)->first();
//return response()->json($admin);
if(empty($admin))
{
$responce['message']="User Not Found";
return response()->json($responce);
}
if(!Hash::check($request->password, $admin->password))
{
$responce['message']="invalid Password";
return response()->json($responce);
}
$responce['status']=true;
$responce['message']='Login Successfull';
$request->session()->put('adm', $admin);
cookie('admid', $admin->id, 120); //can't set cookies
return response($request->cookie('admid')); //checking if cookie is set and trying to get it's value if we will comment this then it will run the logincheck(Request $request) code and login will be successfull.
}
return response()->json($responce);
}
}
解决方案
首先,重要的是要了解 cookie 的工作原理。无法在创建它们的同一请求中访问 Cookie。因此,如果您使用$request->cookie('adminid')
相同的方法,结果将始终不会设置 cookie 或其旧值。
其次cookie('admid', $admin->id, 120);
只是创建cookie,但不保存它。您必须将 cookie 附加到响应中。
$cookie = cookie('name', 'value', $minutes);
return response('Hello World')->cookie($cookie);
或者
use Illuminate\Support\Facades\Cookie;
Cookie::queue('name', 'value', $minutes);
更多内容:Laravel 文档
推荐阅读
- java - 尝试编译测试 javafx 应用程序时出错
- netlogo - 如何使用不隐藏?netlogo 中的链接
- laravel - 如何仅针对一种资源更改 Laravel Nova 中查看按钮上的链接?
- python-3.x - Djnago - oracle DB - int() 参数必须是字符串、类似字节的对象或数字,而不是“列表”
- javascript - 从 Firebase 刷新 Web 组件中的数据
- html - 在 HTML5 数据属性中设置角度组件变量值
- apache-spark - 限制从 Apache Spark 写入 ES
- angular - Angular中matdialog中的路由
- java - 如何使用 Java 更新 png/jpg/tif 图像的元数据?
- vb.net - 如何在 vb.net 中创建快捷方式/热键?