제목이 내 문제를 거의 요약하고 있습니다.
제가 근무하는 회사에는 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 라이브러리가 있습니까?
의견을 보내주셔서 미리 감사드립니다.
예, 가능합니다. 그리고 다음을 수행해야 합니다 -
에
으아악IlluminateSessionMiddlewareStartSession::class,
之前添加AppHttpMiddlewareChangeSessionValueDynamically::class,
.AppHttpMiddlewareChangeSessionValueDynamically::class
에 대한 별칭을 제공하세요. -