웹사이트 페이지를 탐색할 때 PHP 세션이 저장되지 않는 이유는 무엇입니까?
저는 관리자가 로그인 페이지에서 자신을 인증할 수 있도록 간단한 사용자 이름-비밀번호 쌍을 사용하는 웹사이트를 만들고 있습니다. 이를 위해 먼저 사용자가 홈페이지에 도달하면 세션이 생성되고 로그인 버튼을 클릭하면 사용자 이름과 비밀번호를 입력하는 양식으로 리디렉션된 다음 POST 메서드를 통해 양식이 다른 세션으로 전송됩니다. 사용자 이름과 비밀번호를 확인하세요. 페이지가 유효한 경우 로그인한 관리자 사용자 이름이 포함된 세션에 변수를 넣은 다음 관리자 대시보드로 리디렉션하고 해당 변수가 실제로 페이지의 관리자인지 확인하도록 설정되어 있는지 확인하세요.
제목에서 설명했듯이 가장 큰 문제는 홈페이지를 테스트할 때 세션이 생성되는데 로그인 양식에 대한 링크를 클릭하면 세션이 파괴되는 것처럼 보인다는 것입니다. 이 지시를 초래합니다.
홈페이지의 작은 PHP 스니펫(main.php)을 사용하여 세션을 시작하세요
으아아아폴더가 쓰기 가능한지, 세션이 생성되었는지 확인하기 위해 이 질문에 대한 답변의 일부를 얻기 위해 위에 표시된 대로 쿠키 수명 주기를 재정의해 보았습니다. 로그는 항상 홈페이지로 돌아갑니다:
으아아아(첫 번째 줄 | 그 뒤의 숫자는 예상되는 타임스탬프입니다).
로그인 양식의 유일한 PHP 코드 조각(connexion.php)
으아아아로그인한 관리자가 이미 연결되어 있는 경우 대시보드로 직접 리디렉션하기 위해 첫 번째 if를 거기에 넣었습니다. 그 다음 줄은 main.php와 동일한 테스트를 수행하지만 이번에는 로그에 다음이 반환됩니다.
으아아아이는 세션이 삭제되었으며 모든 변수가 설정 해제되었음을 나타냅니다.
세션 사용과 관련하여 제공된 사용자 이름과 비밀번호를 확인하는 역할을 하는 PHP 파일(auth.php)의 코드 일부
으아아아양식 제출 후 파일을 실행하여 반환된 로그:
으아아아등록된 관리자 자격 증명을 폼에 입력했기 때문에 인증 자체는 성공했는데, 로그인 폼에 접속하려고 클릭했더니 홈페이지에서 생성된 세션이 계속 삭제된 것으로 나와서 사용자 이름을 입력할 수 없었습니다. $_SESSION 어레이에 로그인된 관리자로.
if 구조는 승인되지 않은 사용자가 관리자 전용 대시보드 콘텐츠(dashboard.php)에 액세스하는 것을 방지합니다
으아아아내 서버에서 사용되는 PHP 구성 요소의 두 가지 구성 파일에서 발췌(php 8.1.0)
php.ini-개발
으아아아php.ini-production
으아아아session.save_path 매개변수는 두 가지 모두에서 분명히 주석 처리가 해제되어 있습니다. 그러나 session_save_path() 함수가 반환한 경로는 아닙니다.
P粉5881526362023-09-14 09:19:36
https://www.php.net/manual/en/function.session-start.php
새 페이지가 로드될 때마다 이는 다른 HTTP 요청입니다. 모든 HTTP 요청에서 세션이 시작되어야 하므로 모든 페이지에 session_start()
를 추가해야 합니다.
모든 페이지에 포함되는 단일 헤더 파일을 생성하는 것이 좋습니다. 사용자가 로그인하지 않은 경우 로그인 화면으로 리디렉션하는 등 모든 페이지에 필요한 다른 사항을 설정하는 데에도 유용합니다.