【问题标题】:The session works fine in backend, but it doesn't work when I send a request with frontend会话在后端工作正常,但是当我使用前端发送请求时它不起作用
【发布时间】:2020-10-19 21:35:00
【问题描述】:

会话在后端工作正常,但当我使用前端发送请求时它不起作用

在控制器中:

public function captcha(){
    session_start();
    if (isset($_SESSION['captcha_image'])) {
        File::delete($_SESSION['captcha_image']);
        $temp = new Captcha();
        $temp->captcha();
        return response()->json(['url_image' => $_SESSION['captcha_image'],
                                'captcha' => $_SESSION['captcha']], Response::HTTP_OK);

    } else {
        $temp = new Captcha();
        $temp->captcha();
        return response()->json(['url_image' => $_SESSION['captcha_image'],
                                'captcha' => $_SESSION['captcha']], Response::HTTP_OK);
    }

}

创建会话:

$_SESSION['captcha'] = $word;
$_SESSION['captcha_image'] = "image".$time.".png";

【问题讨论】:

  • 不用写session_start();
  • 可以使用 laravel 默认的 Session。你的前端在哪里?
  • STA先生,如果我不写session_start,就会报错
  • Mr A.A Noman Laravel 中的会话仅用于用户和登录,我想将会话用于其他工作。在前端我使用 angular5 和一个简单的方法 GET

标签: angular laravel api session captcha


【解决方案1】:

你可以使用 Laravel 会话:

  1. 通过Request 实例:

    use Illuminate\Http\Request;
    
    public function captcha(Request $request)
    {
        if ($request->session()->has('captcha_image')) {
            File::delete($request->session()->get('captcha_image'));
        }
    
        $temp = new Captcha();
        $temp->captcha();
    
        return response()->json([
            'url_image' => $request->session()->get('captcha_image'),
            'captcha' => $request->session()->get('captcha'),
        ], Response::HTTP_OK);
    }
    
  2. 通过全局 session 辅助方法:

    public function captcha()
    {
        if (session('captcha_image')) {
            File::delete(session('captcha_image'));
        }
    
        $temp = new Captcha();
        $temp->captcha();
    
        return response()->json([
            'url_image' => session('captcha_image'),
            'captcha' => session('captcha'),
        ], Response::HTTP_OK);
    }
    

在会话中存储数据:

// Via a request instance...
$request->session()->put('key', 'value');

// Via the global helper...
session(['key' => 'value']);

请参阅Laravel docs 了解更多信息。

【讨论】:

  • Laravel 中的会话仅供用户使用,而我在登录之前无法访问用户。所以我不能在这里使用 seasion laravel
  • @MohammadReza 您的意思是会话仅供用户使用?每个客户端(访客或经过身份验证的)都有一个会话,只需尝试上面的代码。
  • 。你认为我可以在登录之前为每个用户创建一个会话吗?我不能,因为我在登录之前没有用户信息。
猜你喜欢
  • 1970-01-01
  • 2022-10-20
  • 2017-01-10
  • 2019-10-08
  • 2021-02-07
  • 2016-10-23
  • 1970-01-01
  • 2018-03-04
  • 2020-02-23
相关资源
最近更新 更多