2010-07-06 5 views
1

사용자가 세션을 사용하여 보호 된 영역의 페이지간에 이동할 수있는 암호로 보호 된 영역이 있습니다. 그러나 새 탭을 열어도 다른 탭을 열어두면 (보호 된 영역에있는 탭을 열어 둔 상태) 새 탭에서 일부를 수행 한 다음 이전 탭으로 다시 전환하여 다시 로그인해야합니다. 나는 세션들 사이에서 만료 날짜를 20 분으로 설정하려고 시도했지만 운이 없다. 어떤 아이디어?브라우저의 PHP 전환 탭으로 인해 세션이 작동하지 않아 다시 로그인해야합니다.

// set expiration time of 20 mins 
session_cache_expire (20); 
$cache_expire = session_cache_expire(); 
+0

보호 영역의 새 탭이 있습니까? 당신이 그것을 묘사하는 방식으로 브라우저 버그처럼 더 많이 들립니다 ... 탭은 동일한 웹 사이트가 아닌 한 다른 세션의 세션/쿠키를 방해하지 않습니다. 보안 영역에서 어떤 스크립트가 실행되고 있습니까? 아마도 비 활동으로 인해 세션이 설정되지 않을 수 있습니다. – animuson

+0

더 많은 코드를 보여주십시오. 어떻게 세션을 초기화하고 있습니까? –

+0

시스템에서 "로그인 중"상태를 확인/유지 보수하는 방법은 무엇입니까? – Gumbo

답변

2

보호 된 영역은 다른 탭에로드하는 URL의 하위 디렉토리입니까? 이로 인해 쿠키가 엉망이 될 수 있습니다. 첫 번째 쿠키를 두 번째 페이지의 URL보다 더 구체적인 경로로 설정할 수 있으므로 새 세션이 시작됩니다. 두 개의 서로 다른 파일이 같은 세션에 액세스하지 않는 경우

http://www.php.net/manual/en/function.session-start.php#91298

, 그것은 단지 하나의 것을 의미 할 수 있습니다 :

이 남자가 더 잘 설명하는 일을 그들은하지 않습니다 같은 디렉토리 수준. 예 : a) 한 개는 https 아래 이고 한 개는 http 아래에 있습니다. (매우 일반적이며 짜증나는 오류) b) 하나가/아래에 있고 다른 하나가 /dir1 아래에 있고/dir1이 처음 실행되었습니다. 세션에 의해 생성 된 쿠키는 /dir1 이하이므로 다른 스크립트에서 읽을 수 없습니다. 세션을보고 새 세션을 시작합니다.

솔루션 :

1) 세션의 시작은 항상 루트 디렉토리에서 발생한다. 예를 들어 스크립트에 로그인하여 사용자가 이 아닌 것으로 확인되면 session_destroy()를 사용하고 루트 디렉토리의 로그인으로 보냅니다. 로그인을 요구하지 않고 세션을 사용하는 스크립트 은 루트 디렉토리로 리디렉션하고 세션을 으로 설정하고 다시 리디렉션하는 등 더 창의적인 솔루션이 필요합니다.

2) 쿠키 대신 페이지 사이의 SID를 사용하십시오. 이것은 또한 이 http/https와 함께 작동한다는 것이 장점입니다. 단점은 매우 추악한 URL 코드이며 더 어려울 수 있습니다. ('어떤 페이지가 SID를 사용하지 않고 gallery.php에 링크됩니까?').

+0

세션은 하위 폴더에 설정되어 있습니다. 시도하고 루트로 리디렉션 한 다음 다시 수정하는지 확인합니다. –

+0

그래서 사용자가 example.com/subdir을 먼저로드하면 session_start()를 호출하면 해당 하위 디렉토리 만 세션이 설정됩니까? 그것은 나쁜 디폴트처럼 보입니다. 그것을 끌 수있는 방법이 있습니까? – dimo414

관련 문제