> 백엔드 개발 > PHP 튜토리얼 > PHP 전체 튜토리얼 페이지 1/2에서 초기화 세션 중 오류가 발생했습니다.

PHP 전체 튜토리얼 페이지 1/2에서 초기화 세션 중 오류가 발생했습니다.

WBOY
풀어 주다: 2016-07-29 08:36:41
원래의
1092명이 탐색했습니다.
1. 세션 개요
세션이 무엇인지 처음에는 이해하지 못했습니다. 비전문 사전에서는 회의 및 회의 기간으로 번역합니다. 부적절한 비유를 해보자
(부적절하더라도 의미는 동일함) 세션은 귀하와 웹사이트의 관계입니다. 세션은 웹 기술에서 매우 중요한 역할을 합니다. 웹페이지는 무상태 연결 프로그램이므로 사용자의 브라우징 상태를 알 수 없습니다. 따라서
이 용량으로 다시 웹 서버에 요청을 제공할 때 사용자가 확인할 수 있도록 세션을 통해 사용자의 관련 정보를 기록해야 합니다. 예를 들어
사용자에게 로그인을 요구하는 경우가 많습니다. 일부 웹사이트에서는 사용자가 로그인했다는 것을 어떻게 알 수 있고, 세션이 없으면 로그인 정보를 유지할 수 없습니다. 그러면 사용자에게 모든 웹페이지에서 사용자 이름과 비밀번호를 제공하도록 요청하는 것은 어떨까요?
물론 세션은 사용자 신원 인증에만 사용되는 것이 아니라 나중에 언급할 다른 측면에서도 사용될 수 있습니다. 세션은 세션 기간으로 중국어로 설명됩니다. 세션은 사용자가 사이트의 URL을 입력할 때 시작되고 사이트를 떠날 때 종료됩니다. 세션은 동적 스크립팅 언어 액티브 서버 페이지에서 처음 등장했습니다. 그 기능은 한 문장으로 명확하게 설명할 수 없을 만큼 강력합니다.
PHP가 아직 버전 3.0이었을 때 세션은 영원한 고통이었습니다. PHP는 빠른 실행 속도, 유연한 사용, 강력한 기능 등의 장점이 있지만 세션 문제로 인해 많은 웹사이트 개발자들이 PHP를 포기했습니다. 적어도 제 상사는 그렇게 생각합니다. 당시에는 PHP3에서 세션을 구현하기 위한 솔루션을 제공하는 PHP 프리 함수 라이브러리가 많았지만 모두 정품이 아닌 것으로 느껴졌습니다. 수천 달러 주고 산 휴대폰에 거친 밀짚가방이 들어 있는 것과 마찬가지다. 기능은 똑같지만 늘 어색한 느낌이 든다. php4의 출현으로 PHP는 세션 문제를 다시 해결할 수 있는 기회를 얻었습니다. 세션 구현이 이상적이지는 않지만(주로 효율성 문제로 인해) 결국 자체적으로 구현되어 실제로 사용할 수 있습니다. 그럼 세션을 무엇에 사용하는 걸까요? 오랫동안 말씀하셨는데, 사용하지 않으면 종이를 판매하는 것으로 의심되지 않나요? 세션이 어떤 용도로 사용되는지 살펴보겠습니다. 웹 사이트에서 작업한 사람이라면 누구나 이런 경험을 했을 것입니다. 이를 달성하기 위한 방법으로는 양식, URL 문자열 등이 있지만 일부는 사용자에게 불편함을 줍니다. 양식이 자동으로 제출되더라도 오늘날의 네트워크 상황에서는 지연이 충분하며 이 두 가지 방법 모두 상당히 중요합니다. 프로그래머의 부담을 증가시킵니다. 대규모 프로젝트를 개발하는 경우 이러한 추가 부담을 무시할 수 없습니다. 세션을 사용하면 세션에 등록된 변수를 전역 변수로 사용할 수 있어 다루기가 더 쉽습니다. 뭐, 전역 변수요? 이러한 방식으로 용도를 알 수 있습니다. 가장 중요한 것은 사용자 신원 인증, 프로그램 상태 기록 및 페이지 간 매개변수 전송에 사용됩니다.
오랜 시간 동안 장점에 대해 이야기했지만, 아직 만족하지 마세요. 단점도 있습니다. 파일에 저장되는 변수입니다(물론 효율적이지는 않습니다. 다른 방법으로 사용하면 매우 번거롭습니다.) 개체를 저장할 수 없습니다. 반면 ASP의 세션은 개체 변수를 저장하고 메모리 변수를 사용하여 세션 변수를 저장할 수 있습니다. 그런데 왜 우리는 여전히 PHP를 선택합니까? 하하, 이 장을 이 책의 처음부터 읽으면 이해할 수 있을 것 같습니다. 그래도 이해가 안 된다면 처음부터 다시 시작해 보세요. 당신은 PHP 전문가가 될 것입니다^_^.
세션은 어떻게 구현되나요? 하하, 아주 심오하다고 생각하시겠죠. 제가 그 비밀을 알려드리겠습니다. 변수만 저장하면 많은 독자들이 이것이 매우 간단하다는 것을 이해할 것입니다. 그러나 앞서 말했듯이 http 프로토콜은 상태 비저장 연결입니다. 변수가 누구에게 속해 있는지, 그리고 변수가 누구에게 속해 있는지 어떻게 알 수 있습니까? 세션 구현 중. 쿠키는 클라이언트, 즉 사용자의 컴퓨터에 존재하며, 사용자의 브라우저가 서버에 요청하면 세션 ID도 서버에 전송되어 서버가 이를 수행할 수 있도록 합니다. 당신이 누구인지 식별하십시오. 또한 변수를 식별할 수 있는 사람도 누구입니까? 이런 식으로 세션이 때때로 실패하는 이유를 이해하는 것은 어렵지 않습니다. 믿을 수 없다면 IE의 "도구" 메뉴에 "인터넷 옵션" 메뉴가 있습니다. 이를 연 후 "보안"-> "사용자 정의 수준"을 선택하고 "사용 허용"을 변경하세요. 각 대화' 보안 설정에서 '쿠키'를 비활성화한 후 세션을 사용할 수 있는지 확인하세요. 이제 이해하셨습니다. 그러나 php4는 Linux/Unix 플랫폼에서 쿠키 상태를 자동으로 확인할 수 있으며, 쿠키를 사용할 수 없으면 세션 ID가 자동으로 URL에 첨부되어 전달됩니다. 이것이 세션 측면에서 ASP에 비해 유일한 장점입니다.
2. php3, 4에서 세션 구현
php3에는 세션이라는 것이 없지만 꼭 필요한데 어떻게 해야 할까요? 걱정하지 마십시오. 이 작업을 수행한 사람들이 많이 있으며 그 중 가장 유명한 것은 phplib입니다. 해외에서도 다운로드가 가능하며, 국내 대부분의 PHP 사이트에서 다운로드가 가능합니다. 우리가 가장 먼저 해야 할 일은 phplib와 php3를 함께 작동시켜 작동시키는 것입니다. 이 기능을 실행하려면 먼저 phplib를 설치해야 합니다.따라오세요, 아주 쉽습니다. (다음 방법은 win2000 php3.0.16 apache1.3.12 phplib7.2c mysql3.23.21 for win32에 전달됩니다.) phplib의 가장 기본적인 기능에는 사용자 인증, 세션 관리, 권한 및 데이터베이스 추상화가 포함됩니다.
phplib를 사용하여 세션 기능을 구현하는 방법은 무엇입니까?
1. 먼저 phplib의 압축을 해제합니다. 이 디렉토리를 Apache 설치 디렉토리에 복사합니다. 작성자의 컴퓨터를 예로 들어 보겠습니다. 내 Apache는 d:/apache 디렉터리에 설치되어 있습니다. 위의 "php" 디렉터리를 d:a/pache에 복사하고 phplib 아래의 페이지 디렉터리에 있는 파일과 디렉터리를 d 아래에 복사했습니다. :/apache/htdocs, 디렉터리 자체를 포함하지 않도록 주의하세요. phplib 클래스 라이브러리는 시스템에 따라 초기화되어야 합니다. 일부 기본 매개변수가 포함된 local.inc 파일을 컴퓨터의 실제 상황에 따라 수정할 수 있습니다. d:/apache/php/prepend.php3 파일의 프로그램을 다음과 같이 변경합니다:
if (!isset($_phplib) 또는 !is_array($_phplib)) {
$_phplib["libdir" ] = "d:/apache/php/"; //phplib 아래에 php 디렉토리가 있는 경로로 변경하세요.
}
그런 다음 d:/apache/php/local.inc 파일을 다음과 같이 변경하세요. :
class db_example 확장 db_sql {
var $host = "localhost";//mysql 데이터베이스의 호스트 이름
var $database = "test";//데이터베이스 이름
var $user = "root ";//데이터베이스 사용자 이름
var $password = "";//데이터베이스 사용자 비밀번호
}
마지막 단계는 압축을 푼 디렉터리의 stuff 디렉터리에 있는 create_database.mysql 파일을 실행하는 것입니다. phplib 디렉토리를 사용하여 초기 표면을 생성합니다. phplib가 어떻게 작동하는지 설명하겠습니다. phplib를 실행하는 데 필요한 클래스 라이브러리 파일을 먼저 찾아야 합니다. phplib 배포 패키지에는 prepend.php3 파일이 포함되어 있습니다. auto_prepend에 대해 "d:/apache/php/prepend.php3"(따옴표 포함)을 사용하면 각 페이지에 자동으로 phplib 클래스 라이브러리가 포함됩니다. 물론 가장 쉬운 방법은 phplib의 절대 경로를 지정하는 것입니다. 이는 좋은 생각이 아니며 이식성이 너무 낮습니다.
두 번째 단계, phplib를 사용하는 모든 페이지에서는 먼저 초기화를 위해 page_open 함수를 호출해야 합니다. 이는 현재 또는 미래에 상태를 저장해야 함을 phplib에 알려줍니다. 일반적인
page_open 예는 다음과 같습니다.
page_open(array("sess" => "example_session"))
?> ) 일부 상태 저장 객체를 초기화하는 데 사용됩니다. 참고: phplib 내장 이름(sess)을 사용해야 합니다. 이러한 내장 이름은 페이지 내용이 출력되기 전에 사용자가 정의해야 합니다. 브라우저. php3 스크립트는 관련된 상태 데이터를 데이터베이스에 다시 기록하는 page_close()로 끝나야 합니다. 잊어버린 경우 결과를 생각할 수 있어야 합니다. 하하, 모든 변수가 손실되었습니다. ...
phplib는 상태 정보를 저장하기 위해 쿠키를 사용하기 때문에 페이지 내용이 브라우저에 출력되기 전에 page_open() 함수를 호출해야 합니다. 여기의 페이지 내용은 HTML 정보이거나 빈 줄일 수 있습니다. "죄송합니다. 헤더가 전송된 후 setcookie가 호출되었습니다."라는 오류는 page_open() 이전에 브라우저에 출력된 내용을 나타냅니다. 일반적인 오류는 < 사이에 있으므로 빈 줄에 특히 주의해야 합니다. ;? 및 ? > 태그 사이에 빈 줄이 출력됩니다. local.inc 및 prepend.php3 파일에 빈 줄이 포함되어 있는지 확인해야 합니다. 오류 가능성을 줄이기 위해 다음과 같이 초기화 프로그램을 작성할 수 있습니다.
page_open(array("sess" => "example_session")); 🎜>.....
세 번째 단계는 구체적인 사용입니다.
사용자가 웹사이트를 방문하면 사용자의 세션이 즉시 시작됩니다. 사용자의 브라우저가 쿠키를 지원하는 경우 세션 ID가 생성되어 쿠키에 저장됩니다. 이 고유 ID는 php3에 의해 무작위로 생성됩니다. 임의 시드 문자열. 이 쿠키는 사용자의 하드 드라이브에 기록되지 않으므로 쿠키도 완료됩니다. 사용자의 브라우저가 쿠키를 지원하지 않는 경우 세션 ID는 암호화되어 있으므로 이를 훔칠 수 없습니다. 세션 ID는 인증된 사용자, 인증 만료 시간, 사용자 권한, 기타 편의를 위해 필요할 수 있는 정보 등 사용자 관련 정보를 저장합니다. 세션은 실제로 사용자 세션의 프로세스입니다. 세션은 사용자 등록을 추적하는 데만 사용되는 것이 아니라 다른 용도로도 사용할 수 있습니다. 이 정보는 사용자가 나중에 방문하는 페이지로 전송될 수 있습니다. 물론 전제는 해당 페이지가 phplib를 사용한다는 것입니다. 방법은 매우 간단합니다. 변수를 등록한 후 세션이 끝날 때까지 다음 페이지에서 사용할 수 있습니다. 방법:
register( "variable_name")
여기서 Variable_name은 변수 값이 아니라 변수 이름을 먼저 지정할 수 있습니다. 그런 다음 값을 할당합니다.페이지에서 변수 값을 변경할 수 있으며, 이후 페이지에서는 해당 변수에 접근할 때 변경된 값을 받게 됩니다. 변수의 유형은 다양하며 문자열, 숫자 또는 배열이 될 수 있습니다. 설명:
첫 번째 페이지:
page_open(array("sess" => "example_session"))
$sess->register( "first" ); //변수 이름 앞에 $를 추가할 필요가 없습니다.
if (iset($firstname)) {
$first = $firstname;}
.....
page_close() ;
?>
두 번째 페이지:
page_open();//세션 시작
echo $first;//효과 보기
page_close() ;//상태 정보 저장
?>
변수를 등록한 후 페이지가 최종적으로 page_close() 함수를 호출하면 각 세션 변수가 데이터베이스에 다시 기록됩니다. page_close() 함수 호출을 잊어버리면 변수가 데이터베이스에 다시 기록되지 않으며 예측할 수 없는 결과가 발생합니다. 변수가 사용되고 더 이상 필요하지 않으면 다음 함수를 호출하여 변수를 삭제할 수 있습니다:
page_open(array("sess" => "example_session"))
...
$sess->unregister( "variable_name");
...
page_close()
?> 세션 데이터를 데이터베이스, 공유 메모리 또는 LDAP에 저장할 수 있는 구조입니다. phplib는 데이터베이스 클래스를 사용하므로 oracle8, mysql, postgresql 및 기타 데이터베이스를 선택하여 상태 정보를 저장할 수 있습니다.
phplib의 다른 기능과 세션과 관련된 다른 기능의 사용에 대해서는 해당 설명서를 참조하거나 해당 웹 사이트에서 온라인 설명서를 읽을 수 있습니다. 그 고향은 http://phplib.netuse.de/index.php3입니다. php4의 세션 구현 대부분은 phplib에서 학습됩니다. 또한 쿠키를 사용하여 세션 ID를 저장하고 파일 시스템을 사용하여 변수를 저장합니다(기본적으로). 따라서 해당 세션 변수는 객체를 저장할 수 없다(사실 객체의 내용을 저장할 수는 있지만 살아있는 객체가 아닌 디스크에 저장되기 때문에 의미가 없으며 기껏해야 객체 시체이다.). 이 제한은 그리 크지 않습니다. 대부분의 경우 변수만 저장하면 됩니다. 물론 세션을 데이터베이스에 저장할 수도 있습니다. 다음 섹션에서는 세션을 데이터베이스에 저장하는 방법에 대해 설명하겠습니다. php4는 php3보다 더 많은 세션을 지원하므로 php.ini 파일에는 더 많은 세션 구성 옵션이 있습니다. 각 항목의 기능과 의미를 살펴보겠습니다.
[session]
session.save_handler = 파일; 데이터 저장/검색에 사용되는 핸들러(세션 변수를 저장하는 데 사용하는 것, 기본적으로 파일이 사용됨)
session.save_path = c:/temp; save_handler에 전달된 인수(세션 변수가 저장되는 디렉토리, linux/unix의 /tmp, win 아래의 디렉토리로 설정)
;
; 데이터 파일이 저장된 경로
session.use_cookies = 1 ; 쿠키 사용 여부(물론 쿠키 사용 여부는 win에서 선택 사항이 없습니다)
session.name = phpsessid
; 세션 이름(기본 세션에서 사용하는 쿠키 이름, 변경하지 않는 것이 좋습니다)
은 쿠키 이름으로 사용됩니다.
session.auto_start = 0; 1일 때 자동으로 세션을 활성화합니다. 각 페이지에서 session_start() 함수를 호출할 필요가 없습니다.)
session.cookie_lifetime = 0; 쿠키의 수명(초)(쿠키가 전송된 후 저장 시간을 설정) 기본값은 0 이며 브라우저가 닫힐 때까지를 의미합니다. )
또는 0인 경우 브라우저가 다시 시작될 때까지
session.cookie_path = / ; ) (쿠키 유효 경로)
session.cookie_domain = ; 쿠키가 유효한 도메인 (쿠키 유효 도메인 이름)
session.serialize_handler = 데이터를 직렬화하는 데 사용되는 핸들러(직렬화된 데이터의 식별자를 정의함) 함수는 wddx 모듈이나 php에서 내부적으로만 사용됩니다. 기본값은 php)
; php는 php의 표준 직렬 변환기입니다.
session.gc_probability = 1; (임시 파일이 처리를 시작할 때마다 처리 확률을 설정합니다(gc, 가비지 수집). 기본값 값은 1입니다. )
; '가비지 수집' 프로세스가 시작됩니다.
; 세션이 초기화될 때마다
session.gc_maxlifetime = 1440; 세션을 저장하기 위해 설정된 임시 파일입니다. 삭제되기 전의 시간(초)
; 데이터는 '쓰레기'로 표시되며
은 gc 프로세스에 의해 정리됩니다.
session.referer_check = ; 클라이언트의 세션 코드 삭제 여부. 때로는 보안이나 기타 이유로 기본값이 0임)
; id가 포함된 외부 저장 URL
session.entropy_length = 0; 세션이 높은 엔트로피 리소스에서 읽는 비트 수입니다. 기본값은 0입니다.)
session.entropy_file = 세션 ID를 생성하기 위해 여기에 지정됩니다(생성 시 외부 높은 엔트로피를 사용하도록 세션 코드 설정). 유닉스 시스템의 /dev/random 또는 /dev/urandom과 같은 리소스 또는 파일 값을 지정합니다.)
; session.entropy_length = 16
; session.entropy_file = /dev/urandom
session.cache_limiter = nocache ; (세션 버퍼 제한 설정)으로 설정 ; http 캐싱 측면 결정
session.cache_expire = 180 ; 문서는 n분 후에 만료됩니다(문서 유효 기간, 단위는 분)
Windows 플랫폼에서 php4.01pl2 이전 버전에서는 session.save_path 설정 후 오류가 발생합니다. 이 경우 이는 php4.01pl2 이상에서 수정된 php의 버그입니다. 이전 버전을 사용하는 경우 session.save_path를 "./" 또는 "/temp"로 설정하고 PHP 스크립트가 있는 현재 디스크의 루트 디렉터리에 temp라는 디렉터리를 생성하면 됩니다(내 PHP 스크립트가 있는 경우). d:apachehtdocs 아래에서 d: 드라이브의 루트 디렉터리에 temp라는 디렉터리를 만듭니다.
php4의 세션 관련 함수는 주로 다음과 같습니다.
session_start: 세션을 초기화하며 세션을 사용하는 각 페이지의 시작 부분에서 호출되어야 합니다.
session_destroy: 세션 종료, 세션을 종료해야 할 때 호출됩니다.
session_name: 현재 세션 이름에 액세스합니다.
session_module_name: 현재 세션 모듈에 액세스합니다.
session_save_path: 현재 세션 경로에 액세스합니다.
session_id: 현재 세션 ID 번호에 액세스합니다.
session_register: 새로운 세션 변수를 등록합니다.
session_unregister: 등록된 세션 변수를 삭제합니다.
session_is_registered: 세션 변수가 등록되었는지 확인합니다.
session_decode: 세션 데이터 디코딩.
session_encode: 세션 데이터 암호화.
일반적으로 세 가지 함수만 호출하면 됩니다.
즉, session_start(), session_register(), session_is_registered()입니다.
세션을 사용해야 하는 각 페이지의 시작 부분에서 session_start() 함수를 호출하세요.
세션을 사용하는 일반적인 페이지는 다음과 같습니다.
;html>
....

$var="hello"
session_register("var");//$var 변수 등록, $ 기호가 없다는 점에 유의하세요
if(session_is_registered("var"))//변수가 등록되었는지 확인
echo "하하, 등록되었습니다!"
else
echo "죄송합니다. 아직 등록되지 않았습니다!" ;
?>


php4에서 세션 처리 사용자 정의
6가지 기능을 확장해야 합니다. 물론 그렇습니다. 이러한 함수를 호출할 필요가 없으며 이는 우리에게 투명합니다.
이러한 함수는 다음과 같습니다.
sess_open($sess_path, $session_name)
이 함수는 초기화를 위해 세션 핸들러에 의해 호출됩니다. 전달해야 하는 두 개의 매개변수는 $sess_path이며 이는 php.ini 파일의 session.save_path 옵션에 해당하고 $session_name은 php.ini의 session.name 옵션에 해당합니다. 정확히 어떻게 작동하는지 아래 예를 참조하세요.
sess_close();
이 함수는 페이지 실행이 완료되고 세션 핸들러를 닫아야 할 때 호출됩니다. (세션을 종료하는 데 사용되는 sess_destory와 혼동하지 마십시오.)
sess_read($key)
이 함수는 세션 핸들러가 지정된 세션 키 값($key)을 읽을 때 사용됩니다.
이 함수는 $key로 식별된 세션 데이터를 검색하고 반환합니다. (참고: 데이터를 직렬화하고 역직렬화하는 방법에 대해 걱정할 필요가 없습니다. 이것이 무엇을 의미하는지 모르는 경우에는 걱정하지 마십시오. it)
역자 주 : 직렬화는 프로그램이 종료되거나 필요할 때 변수나 객체를 파일에 저장했다가
프로그램이 실행되거나 다음에 필요할 때 이를 메모리에 전송하는 기술이다. 데이터만 저장하는 방식과는 다릅니다.
sess_write($key, $val);
이 함수는 세션 핸들러가 데이터를 저장해야 할 때 호출되며, 이는 프로그램이 끝날 때 자주 발생합니다. sess_read($key) 함수를 사용하여 다음에 검색할 수 있는 위치에 데이터를 저장하는 역할을 담당합니다.
sess_destroy($key);
이 함수는 세션을 삭제해야 할 때 사용됩니다. 세션 삭제 및 환경 정리를 담당합니다.
sess_gc($maxlifetime);
이 함수는 조각 정리를 담당합니다. 이 경우 오래된 세션 데이터를 삭제하는 역할을 담당합니다. 세션 핸들러는 가끔 이를 호출합니다.
이제 우리가 제공하는 기능에 대한 명확한 아이디어가 생겼습니다.
맞춤형 프로그램은 mysql 데이터베이스나 dbm 파일을 이용하여 세션 데이터를 저장할 수 있습니다. 귀하의 필요에 따라 다릅니다.
지원을 위해 mysql을 사용하기로 결정한 경우 다음을 수행해야 합니다.
먼저 mysql에 세션 데이터베이스를 생성하고 세션 테이블을 생성합니다. 먼저 mysql 클라이언트를 실행하고 다음 명령을 실행합니다.
mysql> 세션 선택, 삽입, 업데이트, 삭제를 phpsession@localhost에 부여합니다.
-> phpsession';
mysql> 테이블 세션 생성(
-> sesskey char(32) not null,
-> expiry int(11) unsigned not null,
-> 값 텍스트 없음 null,
-> 기본 키(sesskey)
-> )
다음으로, session_mysql.php 파일의 $sess_db* 변수를 컴퓨터의 데이터베이스 설정과 일치하도록 수정하세요.

현재 페이지 1/2 12다음 페이지

위 내용은 초기화 중 오류 내용을 포함하여 PHP 초기화 세션 중 오류에 대한 전체 튜토리얼의 1/2페이지를 소개합니다. PHP 튜토리얼에 관심이 있는 친구들에게 도움이 되기를 바랍니다.

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿