문제

나는 "서버를 건드리지 않았다고 맹세합니다"라는 상황 중 하나에 직면해 있습니다.솔직히 저는 PHP 스크립트를 전혀 건드리지 않았습니다.내가 겪고 있는 문제는 PHP 데이터가 다른 페이지나 페이지 새로 고침에 저장되지 않는다는 것입니다.세션 변수(예:$_SESSION['foo'] = "foo" 같은 페이지에 다시 인쇄해도 괜찮습니다.하지만 다른 페이지에서 동일한 변수를 사용하려고 하면 설정되지 않습니다!무슨 일이 일어나고 있는지 확인하기 위해 호스트 서버에서 사용할 수 있는 PHP 기능이나 정보가 있습니까?

다음은 현재 내 호스트 서버에서 작동하지 않는 예제 스크립트입니다.

<?php
session_start();
if(isset($_SESSION['views']))
    $_SESSION['views'] = $_SESSION['views']+ 1;
else
    $_SESSION['views'] = 1;

echo "views = ". $_SESSION['views'];
echo '<p><a href="page1.php">Refresh</a></p>';
?>

페이지 새로 고침을 수행한 후에는 'views' 변수가 증가하지 않습니다.나는 이것이 그들의 문제라고 생각하지만, 먼저 내가 완전한 바보가 아닌지 확인하고 싶었습니다.

내 호스트 서버(PHP 버전 4.4.7)에 대한 phpinfo()는 다음과 같습니다.alt text

도움이 되었습니까?

해결책

유용한 정보에 감사드립니다. 내 호스트가 서버를 변경하고 더 이상 존재하지 않는 /var /php_sessions 이외의 다른 세션 저장 경로를 사용하기 시작한 것으로 나타났습니다. 해결책은 선언해야 할 것입니다 ini_set(' session.save_path','SOME WRITABLE PATH'); 내 모든 스크립트 파일에서는 고통이었을 것입니다. 나는 호스트와 이야기를 나누었고 그들은 세션 경로를 존재하는 실제 경로로 명시 적으로 설정했습니다. 이것이 세션 경로 문제가있는 사람에게 도움이되기를 바랍니다.

다른 팁

https : //와 http : //를 혼합하지 않는지 확인하십시오. 세션 변수는 안전한 세션과 안전하지 않은 세션 사이에 흐르지 않습니다.

같은 문제가있었습니다. 저에게 일어난 일은 서버 관리자가 세션을 변경 한 것입니다. 쿠키가 발견되지 않았기 때문에 PHP는 매번 새로운 세션을 만들었으므로 세션 변수는 보이지 않았습니다.

사용 phpinfo() 그리고 확인하십시오 session.* 설정.

정보가 쿠키에 저장되어 브라우저가 쿠키를 허용하지 않을 수도 있습니다.

먼저 확인하고 결과를 다시 확인하십시오.

당신은 또한 할 수 있습니다print_r($_SESSION); 이 변수를 덤프하고 내용을 보려면 ....

당신에 관해 phpinfo(),,입니다 session.save_path 유효한 것? 웹 서버 에이 디렉토리에 대한 쓰기 액세스가 있습니까?

도움이 되었기를 바랍니다.

나는 다음과 같은 문제가 있었다

인덱스 .php

<?
    session_start();
    $_SESSION['a'] = 123;
    header('location:index2.php');
?>

index2.php

<?
  session_start();
  echo $_SESSION['a'];
?>

변수 $_SESSION['a'] 올바르게 설정되지 않았습니다. 그런 다음 나는 변경했다 index.php acordly

<?
    session_start();
    $_SESSION['a'] = 123;
    session_write_close();
    header('location:index2.php');
?>

나는 이것이 내부적으로 무엇을 의미하는지 모르겠다. 나는 단지 세션 변수 변화가 충분히 빠르지 않다는 것을 스스로 설명한다 :)

웹 서버에서 세션 저장 경로가 쓸 수 있는지 확인하십시오.

쿠키가 켜져 있는지 확인하십시오 ..

Firebug Extension과 함께 Firefox를 사용하여 쿠키가 설정되고 다시 전송되는지 확인하십시오.

PHP 4.4.9가 PHP4 시리즈의 마지막이기 때문에 관련없는 노트에서 PHP5를 살펴보십시오.

스크립트가 실행되는 폴더의 그룹과 소유자가 누구인지 확인하십시오. 예를 들어 그룹 ID 또는 사용자 ID가 잘못되면 루트로 설정되면 세션이 제대로 저장되지 않습니다.

값을 늘리기 전에 "뷰" 값을 확인하세요.이상한 이유로 문자열로 설정되는 경우 여기에 1을 추가하면 항상 1이 반환됩니다.

if (isset($_SESSION['views'])) {
    if (!is_numeric($_SESSION['views'])) {
        echo "CRAP!";
    }
    ++$_SESSION['views'];
} else {
    $_SESSION['views'] = 1;
}

자체 서버 (PHP 5)에서 코드를 테스트했기 때문에 코드 오류를 제거 할 수 있습니다.

다음은 확인해야 할 사항입니다.

  1. 어디서나 session_unset () 또는 session_destroy ()를 호출하고 있습니까? 이러한 기능은 세션 데이터를 즉시 삭제합니다. 내 스크립트의 끝에 이것을 넣으면, 당신이 설명하는 것처럼 정확히 행동하기 시작합니다.

  2. 모든 브라우저에서 동일하게 작동합니까? 하나의 브라우저에서 작동하지 않고 다른 브라우저에서 작동하는 경우, 비 기능 브라우저에 구성 문제가있을 수 있습니다 (예 : 쿠키를 끄고 켜지거나 실수로 쿠키를 차단하는 것을 잊어 버렸습니다).

  3. 세션 폴더가 쓸 수 있습니까? IS_WRIBLE () 로이 테스트 할 수 없으므로 폴더 (phpinfo ()에서 /var /php_sessions처럼 보이면 세션이 실제로 생성되고 있는지 확인해야합니다.

PHP5에서 세션을 설정하면 PHP4 페이지에서 읽으십시오. 올바른 위치에 보이지 않을 수 있습니다! 페이지를 동일한 PHP 버전으로 만들거나 session_path를 설정하십시오.

나는 비슷한 문제에 대한 답을 찾기 위해 나이를 보냈다. 매우 유사한 코드가 동일한 서버의 다른 .php에서 완벽하게 작동했기 때문에 코드 나 설정에 문제가되지 않았습니다. 이 페이지의 세션에 매우 많은 양의 데이터가 저장되어 문제가 발생했습니다. 한 곳에서 우리는 다음과 같은 선이있었습니다.$_SESSION['full_list'] = $full_list 어디 $full_list 데이터베이스에서로드 된 데이터 배열이었다. 각 행은 약 150 개의 요소 배열이었습니다. 코드가 2 년 전에 처음 작성되었을 때 DB에는 약 1000 행만 포함되어있어 $full_list 약 100 개의 요소가 포함되어 있으며 각각 약 20 개의 요소 배열입니다. 시간이 지남에 따라 20 개의 요소가 150 및 1000 행으로 17000으로 바뀌 었으므로 코드는 64 Meg의 데이터를 세션에 저장하고있었습니다. 분명히이 양의 데이터가 저장되면서 다른 것을 저장하는 것을 거부했습니다. 세션에 데이터를 저장하지 않고 로컬로 데이터를 처리하도록 코드를 변경하면 모든 것이 완벽하게 작동했습니다.

비슷한 문제가 발생했을 때 찾은 한 가지 솔루션 (Apache 1을 사용한 OSX 및 PHP5로 전환)을 알고 있습니다. 1 개의 특정 키 (예 : Unset ($ _ session [ 'key']);)이 저장하지 않아야한다는 것이 었습니다. 내가 그 열쇠를 더 이상 세우지 않아도 더 이상 저장되었습니다. 다른 사이트의 서버를 제외하고는 이것을 다시 본 적이 없지만 다른 변수였습니다. 특별한 것은 없었습니다.

이 darryl에 감사드립니다. 이것은 나를 도와주었습니다. 세션 변수를 삭제하고 있었고 어떤 이유로 세션이 커밋하는 것을 막고있었습니다. 이제 나는 단지 그것을 대신 null로 설정하고 (내 앱에 적합) 작동합니다.

비슷한 문제가 발생했을 때 찾은 한 가지 솔루션 (Apache 1을 사용한 OSX 및 PHP5로 전환)을 알고 있습니다. 1 개의 특정 키 (예 : Unset ($ _ session [ 'key']);)이 저장하지 않아야한다는 것이 었습니다. 내가 그 열쇠를 더 이상 세우지 않아도 더 이상 저장되었습니다. 다른 사이트의 서버를 제외하고는 이것을 다시 본 적이 없지만 다른 변수였습니다. 특별한 것은 없었습니다.

다른 의견에서 제가 보지 못한 일반적인 문제는 다음과 같습니다. 호스트가 어떤 종류의 캐시를 실행하고 있습니까? 그들이 자동으로 캐싱되면 어떤 방식 으로든 이런 종류의 행동을 얻을 수 있습니다.

실수로 페이지에서 Session_Start () 문을 놓친 경우에도 발생할 수 있다는 점을 추가하고 싶었습니다.

"/"대신 "//"로 세션 쿠키 경로를 설정했습니다. Firebug는 굉장합니다. 누군가가 도움이되기를 바랍니다.

www.domain.com/auth.php에서 오는 보안 페이지를 사용할 때 Domain.com/destpage.php로 리디렉션되었습니다. auth.php 링크에서 www를 제거하고 작동했습니다. 이것은 모든 것이 다른 일이 작동했기 때문에 나를 던졌습니다. 그래도 목적지에 도착했을 때 세션이 설정되지 않았습니다.

종종 간과되는 일반적인 문제는 Session_start () 명령 전에 다른 코드 나 추가 간격이 없어야한다는 것입니다.

Session_Start () 이전에 빈 줄이있는 곳에이 문제가 발생하여 제대로 작동하지 않았습니다.

내 솔루션 추가 :

액세스하는지 확인하십시오 올바른 도메인. 나는 사용하고 있었다 www.mysite.com 세션을 시작하고 mysite.com (없이 www).

나는 안전한 쪽/사이트에있는 모든 도메인의 htaccess rewrite를 추가하여 이것을 해결했습니다.

HTTP 또는 HTTPS를 사용하는지 확인하십시오.

php.ini를 편집하십시오.
SESSION.GC_PROBALIATY의 값은 1이므로 0으로 설정하십시오.

session.gc_probability=0

session_write_close ()를 사용하고 있는지 확인하십시오. 어디서나, 나는 다른 세션 직후에 이것을 사용하고 있었고 다시 세션에 편지를 보내려고했는데 작동하지 않았습니다.

내가해야 할 또 다른 몇 가지 일 (나는 같은 문제가 있었다 : PHP 업그레이드 후 5.4로 Sesson 보유 없음). 서버의 php.ini가 포함 된 내용에 따라 많은 사람들이 필요하지 않습니다 (phpinfio ());

session.use_trans_sid=0 ; Do not add session id to URI (osc does this)
session.use_cookies=0;  ; ensure cookies are not used
session.use_only_cookies=0 ; ensure sessions are OK to use IMPORTANT
session.save_path=~/tmp/osc; ; Set to same as admin setting
session.auto_start = off; Tell PHP not to start sessions, osc code will do this

기본적으로 php.ini는 쿠키로 설정되어야하며 세션 매개 변수는 OSC가 원하는 것과 일치해야합니다.

Application_top.php에서 몇 개의 세션 코드 스 니펫을 변경해야 할 수도 있습니다. TEP_SESSION_IS_REGISTERED (...) 호출 (예 : 탐색 객체)에 존재하지 않는 개체 생성, $ http_ 변수를 최신 $ _server Ones 및 A로 설정하십시오. 빈 객체에 대한 다른 ISSET 테스트는 거의 없습니다 (Google for Info). 결국 약간 수정 된 application_top.php와 함께 원래 sessions.php 파일 (포함/클래스 및 포함/함수)을 사용할 수있게되었습니다. php.ini 설정이 주요 문제 였지만 이는 물론 서버 회사가 기본값으로 설치 한 내용에 달려 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top