2016-08-04 2 views
6

예를 들어 하위 폴더에서 내 세션에 액세스 할 수 있습니다./teacher,/students는 내 웹 사이트에 있지만,/아래에있는 파일에는 없습니다.PHP 세션은 하위 폴더에서만 사용 가능합니다.

내 설정 : 내 페이지 위

:

session_set_cookie_params(time()+86400000, '/', '.mysite.com', 0, 1); 
    ini_set('session.use_only_cookies', 1); 
    if(!isset($_SESSION)) 
    { 
     session_start(); 
    } 

내가

session.save_path = '/home/mysite/cvsessions' 

php.ini라고

내 SESSIONS

session_regenerate_id(true); 
$_SESSION['signature'] = $signature; 

내 설정은 어떻게 잘못 얻고 무엇 ?

+0

두 가지 제안 : 특정 도메인을 갖고 싶으면 처음부터 지점을 생략하십시오. 더 많은 도메인의 경우 와일드 카드를 사용하고 도메인 이름 앞에 *를 추가하십시오. 추가로/behnd 도메인을 추가하십시오. 첫 번째 줄은 "session_set_cookie_params (time() + 86400000, '/', 'mysite.com/', 0, 1);" 또한 session_start() 전에이 함수를 호출하려고했습니다. 지금까지 내가 아는 한 권장되는 순서는 – JRsz

+0

입니다. 세션 설정 쿠키 매개 변수는'php.ini' 파일에 직접 입력해야합니다. 사용자 정의 php.ini 파일에 다른 세션 관련 설정이 있습니까? 모든 디렉토리에 php.ini가 있거나 전체 도메인 계정에 대해 하나의 .ini 파일입니까? – Martin

+0

@JRsz 지금 구현하고 되돌립니다. –

답변

7

명확한 설명 :이 답변은 시스템 전체의 기본을 덮어 쓰기 위해 PHP 파일이 포함 된 동일한 폴더에 php.ini의 파일을 사용하는 방법에 대한 것입니다 설정에서이 설정은 사용자가 이미 편집 할 수 없거나 편집해서는 안되는 표준 기본 php.ini 파일이 있다고 가정합니다.

난 당신이 설명하는지에 비슷한 문제가 있었다 당신이 실제로에서 ONE의 php.ini 파일을 가지고 할 수있다 반면에 당신은, 각각의 활성 폴더에 php.ini 파일을하지 않아도 짐작 것 당신의 루트 폴더가 없으므로 서브 폴더 (/students 등) 은 루트 php.ini을 사용하지 않고 간단히 계정 또는 시스템 기본값을 사용합니다.

설정 한 서버 시스템 (예 : CPanel 설치)에 따라 기본 서버 범위 php.ini에서 설정을 변경하려면 사용자 설정과 같은 새 php.ini 파일이 필요합니다. 경우 계정 별 세션 저장 위치) 디렉토리에 설치되어야하며 기본값이 아닌 php.ini 설정을 사용해야합니다.

그래서, 단계적으로 :

  • , 당신은 모든 폴더에 php.ini 파일이 있습니까 등 /, /teachers/students?

  • php.ini 파일은 모두 동일합니까?

  • 모든 폴더는 동일해야하므로 모두 자신의 php.ini 복사본이 있어야합니다. 그렇지 않으면 아무 것도 없어야합니다. 그렇지 않으면 하나의 (사용자 정의) php.ini 설정과 다른 (시스템 기본값) php.ini 설정 사이를 변경할 때 불일치 문제를 일으키는 이러한 종류의 동작 변경이 발생합니다.

은 폴더에만 공개 HTML 루트 폴더가 php.ini 파일이 그 기본을 사용하는 모든 다른 폴더를 의미했다 그들 또는 prehaps 누락 된 경우 등 대중 HTML 루트에서 세션을 찾고있다 잘못된 장소 - '/home/mysite/cvsessions' 주소를보고있는 반면 PHP 세션의 기본 주소는 /home/tmp입니다.

이 표시가 도움이 되었나요?

PHP> = 5.4

if (session_status() == PHP_SESSION_NONE) { 
    session_start(); 
} 

를 PHP < 버전 5.4.0

if(session_id() == '') { 
    session_start(); 
} 

의 경우 : 세션이 시작되면 체크


더 나은 방법 소 rce : https://stackoverflow.com/a/18542272/3536236

+0

phl.ini 파일을 여러 개 사용하고 있다면 PHP 설치시 매우 잘못된 것이 있습니다. – symcbean

+0

CPanel이 작동하는 방법이며 하나의 기본 php.ini 파일이 있습니다. 그런 다음 특정 계정에 대해이 기본 php.ini 파일을 변경하려면 조정 된 설정 만 포함 된 php.ini 파일이 계정 도메인의 각 폴더에 저장됩니다 . 아마도 ..... @symcbean – Martin

+0

세션 파일을 저장하는 곳은 계정마다 다르므로 많은 계정을 다루는 기본 php.ini에서 (내 경우에는)이 계정이 설정되지 않으므로 다음과 같이 설정해야합니다. 계정별로. 각 폴더가 변경된 설정의 사본을 필요로한다는 것이 가장 큰 아이디어는 아니지만 .... – Martin

0

안녕 코드를 통해 이동하시기 바랍니다

$lifetime=time()+86400000; 
session_start(); 
setcookie(session_name(),session_id(),$lifetime,'/', '.mysite.com'); 
+0

setcookie를 추가했지만 작동하지 않았습니다. –

+0

시도해 보았던 코드는 무엇입니까? –

+0

콘텐츠를 보내기 전에'setcookie()'를 사용했는지 확인 했습니까? 즉,'?>'와 같은 끝 블록의 공백이 없으므로 스트림에 어떤 echo가 생깁니 까? –

0

문제를 진단하고 문제를 진단하기 시작합니다.

당신이 원인을 지적하기 위해 제공 한 정보에는 아무것도 없습니다. 첫 번째 단계는 다음과 같은 간단한 스크립트를 만드는 것입니다.

<?php 
error_reporting(E_ALL); 
session_start(); 
$_SESSION['visits'][]=$_SERVER['PHP_SELF']; 
print "<pre>" . var_export($_SESSION['visits'],true) 
    . "</pre><br />" . session_name() . "\n<br />" . 
    ini_get('session.save_path'); 

그런 다음 스크립트를 각 디렉토리에 복사하십시오.

배포 된 각 인스턴스의 URL을 방문하여 session_name이 변경되지 않고 오류가보고되지 않는지 확인하십시오.

대부분의 경우 코드에 오류가 있습니다. session_start() 호출 (따라서 헤더 플러시) 이전에 본문 내용을 내보내거나 세션 저장 경로가 대체됩니다.