작은 CMS 작성. 사용자 인증은 명명 된 세션에서 php로 설정된 세션 변수를 기준으로합니다. 로그 아웃이 호출되면, Ajax 루틴은 작업을 수행하는 별도의 PHP 스크립트를로드합니다. 이 별도의 스크립트는 동일한 세션 매개 변수를 사용합니다. 세션 변수는 무작위 데이터로 개별적으로 덮어 쓰여지고 세션은 파괴됩니다. 이 작동합니다. 로그 아웃 한 후 브라우저 쿠키 목록을 검사하면 세션 쿠키가 제거되었음을 알 수 있습니다. 지금까지 모두 괜찮 았어.웹 사이트에서 사용자를 로깅하는 데 어려움이 있습니다.
사용자가 로그온하는 동안 동일한 사이트의 다른 페이지로 이동하거나 새 브라우저 탭에서 두 번째 페이지를 열면 문제가 발생합니다. 둘 중 하나가 완료되면 로그 아웃 루틴은 세션을 삭제하거나 설정을 해제 할 수 없습니다. 더욱이 암호 세션 변수가 로그 아웃 할 때 임의로 지정 되더라도 페이지를 다시로드하면 이전 값으로 복원되므로 효과적으로 사용자를 다시 로그인 할 수 있습니다.
브라우저 데이터를 검사하면 session_destroy()가 실행될 때 세션 쿠키를 삭제하지 못했음을 보여줍니다. 프로그래밍 방식으로 처리 할 수있는 방법은 없습니다.
동일한 세션 매개 변수를 사용하는 두 번째 사이트 페이지를 여는 것이 겉으로보기에는 세션을 잠궈서 어느 페이지에서나 삭제할 수없는 이유를 알아 내려고하고 있습니다. 아무데도 php 매뉴얼에서 그런 행동을 제안하지 않습니다.
브라우저 캐시가 가능한 원인으로 제안되었지만 가능성이 희박합니다.
얼마 동안이 문제가 해결되었습니다. 어떤 아이디어?
테스트가 Firefox, 버전 6 이상에서 완료되었습니다.
세션 변수에 암호를 넣지 마십시오. – developerwjk
[session_destroy() 문서] (http://php.net/session_destroy)를 읽으면 세션 쿠키를 제거하지 않음을 분명히 알 수 있습니다. setcookie() 호출로 설정을 해제해야합니다. 세션을 "죽이기"위해서 정말로 필요한 것은'$ _SESSION = array(); session_write_close()'. 빈 세션을 디스크에 강제로 적용하고 사용자는 효과적으로 잊어 버리고 로그 아웃됩니다. –