首页 > 解决方案 > Laravel session::has('key') 新请求后不存在

问题描述

第一次使用 Laravel,有点困惑。

在控制器操作中执行 ajax 请求,并且在我之前存储的下一个请求会话密钥之后不存在。

此代码的目的是保存一组图像并将它们的名称存储到会话以供进一步工作。

我的父页面和 ajax 请求中的会话 ID 相同。应用程序还没有用户身份验证。

(更新)会话驱动程序默认为“文件”。

为什么会话密钥不能正常保存?

public function upload(Request $request)
{
    $rules = ['photo.*' => 'image|mimes:jpeg,png,jpg|max:2048'];
    $validator = Validator::make($request->all(), $rules);

    $files = [];
    $fileNames = [];
    $errors = [];

    if ($validator->fails()) {
        $errors = ArrayHelper::getFinalValuesRecursive($validator->errors()->messages());
    } else {
        foreach ($request->file('photo') as $key => $value) {
            $imageName = $key . md5(time() . $key) . '.' . $value->getClientOriginalExtension();
            $value->move(public_path('uploads'), $imageName);

            $fileNames[] = $imageName;
            $files[] = '/uploads/' . $imageName;
        }

        $sessionFiles = [];

        if (Session::has('photo')) {
            $sessionPhoto = Session::get('photo');
            foreach ($sessionPhoto as $value) {
                $sessionFiles[] = $value;
            }
        }

        Session::put('photo', array_merge($sessionFiles, $fileNames));
    }

Javascript

$(document).ready(function () {
    $('#photo').on('change', function () {
        var fileData = $('#photo').prop('files');
        var formData = new FormData();

        for (var i = 0; i < fileData.length; i++) {
            formData.append('photo[]', fileData[i]);
        }
        formData.append("_token", $('input[name="_token"]').attr('value')); //csrf

        $.ajax({
            url: '{{route('adverts.upload')}}',
            dataType: 'text',
            cache: false,
            contentType: false,
            processData: false,
            data: formData,
            type: 'post',
            success: function (response) {
                response = $.parseJSON(response);

                if (response.errors.length) {
                    for (var i = 0; i < response.errors.length; i++) {
                        $('#image_errors')
                            .append('<div class="invalid-feedback" style="display: block;">' + response.errors[i] + '</div>');
                    }
                } else {
                    $('#image_errors').html('');
                    var totalFile = response.files.length;
                    for (var i = 0; i < totalFile; i++) {
                        $('#image_preview').append("<img src='" + response.files[i] + "'>");
                    }
                }
            }
        });
    });

});

标签: phpajaxlaravellaravel-7

解决方案


推荐阅读