Laravel에서는 액세스된 경로에 따라 세션 시간을 동적으로 연장할 수 있습니까?
P粉019353247
P粉019353247 2023-09-01 17:36:54
0
1
543

제목이 내 문제를 거의 요약하고 있습니다.

제가 근무하는 회사에는 config/session.php의 세션 시간이 기본 동작인 120분 후에 만료되도록 설정된 Laravel 애플리케이션이 있습니다. 우리는 이 값을 변경하고 싶지 않습니다.

그러나 시스템에는 사용자가 많은 수의 양식/설문지에 응답해야 하는 특정 기능이 있습니다.사용자가 입력하는 속도가 느린 경우 완료하는 데 3~4시간 이상이 걸릴 수 있습니다제출하기 전에 돌아가기 몇 가지 답변을 다시 생각해 보세요.

문제는 일부 사용자가 여전히 모든 질문을 완료하지 않았으며 세션 만료로 인해 진행 상황이 사라지고 때로는 몇 분 후에야 "다음 페이지"로 전환했다는 사실을 알게 된다는 것입니다. 질문. 이미 채워진 데이터를 저장하는 것을 고려했지만 AJAX 호출로 콘텐츠를 유지하고 이미 채워진 부분을 데이터베이스에 저장하더라도 양식에 응답할 때 다시 로그인해야 하는 것은 여전히 나쁜 사용자 경험이 될 것입니다. 어쨌든 이를 따라야 하며 양식 페이지에 다시 링크해야 합니다. 세션 만료로 인해 고객으로부터 많은 불만이 접수되었습니다.

가장 좋은 해결책은 FormController.php에 일종의 기능을 생성하는 것입니다. 사용자가 양식 페이지나 다른 특정 경로에 들어가면 session과 같은 것을 실행합니다. () 작업 ->extendSessionInMinutes(360). 몇 가지 조사를 했지만 Laravel 문서(Laravel 8.1를 사용하고 있음에 유의하세요) 또는 Stackoverflow에서 비슷한 내용을 찾을 수 없습니다. 사용자 역할 등에 따라 다양한 세션 수명주기를 제공하는 새로운 미들웨어를 만드는 방법에 대한 솔루션과 같이 이번 주에 이 주제에 대해 많이 읽었지만 이 옵션은 우리에게는 작동하지 않았습니다.

저는 유사한 솔루션을 사용하여 새 변수 session()->put('time_to_logout' , now()-를 추가하는 솔루션을 개발 중입니다. >addHours( 2)) 세션이 언제 2시간에 도달하는지 정확히 알 수 있도록SESSION_LIFETIME 값을 5시간으로 설정하고 로그아웃이 필요한지 30분마다 확인하고 사용자를 로그아웃 페이지로 리디렉션하는 JS 기능을 추가합니다. 사용자가 양식 페이지에 있으면 확인을 중지합니다.

하지만 이것이 사실 좋은 해결책은 아닌 것 같은데, 다른 해결책은 생각나지 않는 것 같습니다.어떤 식으로든 세션 시간을 연장하여 내가 원하는 것을 달성할 수 있는 방법이 있나요? 또는 사용자에게 영향을 주지 않고 세션을 다시 생성하고(이렇게 하면 양식의 CSRF 토큰이 엉망이 될 것이라고 장담합니다) 사용자가 계속해서 양식을 작성하는 동안 2시간 동안 기다리지 않고 세션을 원활하게 다시 생성합니다. 어떤 변화가 느껴지나요?

한번 세션이 생성되면 만료 시간을 변경할 수 없나요? Laravel의 기본 세션 관련 기능을 너무 많이 변경하지 않고도 나를 도울 수 있는 일종의 PHP 라이브러리가 있습니까?

의견을 보내주셔서 미리 감사드립니다.

P粉019353247
P粉019353247

모든 응답 (1)
P粉978551081

예, 가능합니다. 그리고 다음을 수행해야 합니다 -

  1. 세션 수명주기의 동적 변경은 미들웨어를 통해서만 가능합니다. 컨트롤러(미들웨어 없음)를 통해 변경하면 세션이 이미 시작되었으므로 세션 값이 변경되지 않습니다. 그래서 미들웨어가 필요합니다. 바로 이렇습니다-
으아악
  1. 그 후, app/Http/Kernel.php 파일의 $middlewarePriority 배열에 미들웨어를 추가해야 합니다. 이는 Laravel이 자체 "StartSession" 미들웨어를 실행하기 전에 실행되어야 합니다. 바로 이렇습니다-

IlluminateSessionMiddlewareStartSession::class,之前添加AppHttpMiddlewareChangeSessionValueDynamically::class,.

으아악
  1. 아래와 같이AppHttpMiddlewareChangeSessionValueDynamically::class에 대한 별칭을 제공하세요. -
으아악
  1. 아래 표시된 대로 경로에 이 미들웨어를 포함하세요. -
으아악
    최신 다운로드
    더>
    웹 효과
    웹사이트 소스 코드
    웹사이트 자료
    프론트엔드 템플릿
    회사 소개 부인 성명 Sitemap
    PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!