首页 > 解决方案 > 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);
 }
}

标签: laravelsessioncookies

解决方案


首先,重要的是要了解 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 文档


推荐阅读