【问题标题】:session forget in laravel 8 not working with cookie issuelaravel 8中的会话忘记不能处理cookie问题
【发布时间】:2021-07-04 16:32:42
【问题描述】:

我使用的是 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);
 }
}

【问题讨论】:

    标签: laravel session cookies


    【解决方案1】:

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

    【讨论】:

    • 嘿,您的第二个代码可以设置 cookie,但现在我也无法删除 cookie 和会话。感谢您的回答,我希望您也能帮助我销毁 cookie 和会话..?
    • 对于 Cookie 应该可以工作:Cookie::queue(Cookie::forget('name')); 和对于会话 request()->session()->forget('name');
    【解决方案2】:

    你可以像这样使用来设置cookies ...

        use Illuminate\Http\Response;  
        $response = new Response('Set Cookie');  
           
        $response->withCookie(cookie('admin', $admin->id, 1200));
            
        echo $response->cookie('admin');//to display cookie...
    

    【讨论】:

    • 嘿,感谢您的回答,现在我可以设置 cookie,但它没有被删除......会话也发生了同样的问题......它正在设置但没有得到销毁。
    • 很高兴我能帮助你...如果对你有帮助,请你接受我的回答。
    • 我实际上已经使用了@Autista_z 的第二个答案.....我的问题仍然悬而未决,所以我认为我不会关闭这个问题。
    • 好吧...很高兴@Autista_z 的回答对您有所帮助... ...
    猜你喜欢
    • 1970-01-01
    • 2016-08-29
    • 1970-01-01
    • 2018-02-22
    • 1970-01-01
    • 2017-02-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多