세션이란 사용자가 웹사이트를 탐색할 때 웹사이트에 입장한 후 브라우저를 닫을 때까지의 시간, 즉 사용자가 웹사이트를 탐색하는 데 소비한 시간을 의미합니다. 위의 정의에서 Session은 실제로 특정 시간 개념임을 알 수 있습니다.
일반적으로 웹사이트의 특정 페이지에 있는 변수(서버 측 변수 참조, 이하 동일)는 다음 페이지에서 사용할 수 없습니다. 세션에 등록된 변수를 전역 변수로 사용할 수 있습니다. 이러한 방식으로 세션을 사용하여 사용자 신원 인증, 프로그램 상태 기록, 페이지 간 매개변수 전송 등을 수행할 수 있습니다.
PHP3 버전에서는 세션이 어떻게 구현됩니까?
PHP3 자체는 세션 기능을 구현하지 않습니다. 이를 구현하기 위해 가장 유명한 방법은 phplib입니다. phplib의 가장 기본적인 기능에는 사용자 인증, 세션 관리, 권한 및 데이터베이스 추상화가 포함됩니다. 다음으로 phplib을 사용하여 세션을 구현하는 방법을 설명하겠습니다.
1. 먼저 phplib를 설치합니다(win32의 경우 환경은 win2000+php3.0.16+Apache1.3.12+phplib7.2c+mysql3.23.21입니다).
먼저 phplib의 압축을 풀고 이 디렉터리를 Apache에 복사합니다. 설치.디렉토리. 예: Apache가 d:Apache 디렉터리에 설치된 경우 "php" 디렉터리를 d:Apache에 복사하고 phplib 디렉터리의 페이지 디렉터리(디렉토리 자체 제외)에 있는 파일과 디렉터리를 d:에 복사합니다. Apachehtdocs 아래에 있습니다.
phplib 클래스 라이브러리는 시스템에 따라 초기화되어야 하며, local.inc 파일은 수정이 필요할 수 있습니다. 여기에는 몇 가지 기본 매개변수가 포함되어 있으며, 이는 귀하의 컴퓨터의 실제 상황에 따라 수정될 수 있습니다.
d:Apachephpprepend.php 파일의 프로그램을 다음과 같이 변경합니다.
if (!isset($_PHPLIB) or !is_array($_PHPLIB)) {
$_PHPLIB["libdir"] = "d:/Apache/php/"; //phplib 아래의 php 디렉토리 경로
}
d:Apachephplocal.inc 파일을 수정합니다.
class DB_Example은 DB_Sql을 확장합니다.
var $Host = "localhost"; //mysql 데이터베이스의 호스트 이름 var $Database = "test"; //데이터베이스 이름 var $User = "root" //데이터베이스 사용자 이름 var $Password = "1234567"; // 데이터베이스 사용자 비밀번호
}
마지막으로, phplib 디렉터리 아래의 stuff 하위 디렉터리에 있는 create_database.mysql 파일을 기반으로 초기 테이블이 생성됩니다.
phplib를 사용하는 모든 페이지는 먼저 phplib를 실행하는 데 필요한 클래스 라이브러리 파일을 찾을 수 있어야 하므로 이를 지원하도록 php.ini에서 auto_prepend 변수를 설정할 수 있습니다. phplib에는 prepend.php 파일이 포함되어 있으며 auto_prepend를 "d: / Apache/php/prepend.php"(따옴표 포함)를 입력하면 각 페이지에 자동으로 phplib 클래스 라이브러리가 포함됩니다. 또한 phplib 클래스 라이브러리가 있는 디렉터리를 include 변수에 추가하여 이러한 파일을 찾을 수 있습니다. 2. page_open() 함수를 호출하십시오.
phplib를 사용하는 모든 페이지에서는 먼저 초기화를 위해 page_open 함수를 호출해야 합니다. 예:
<?php
page_open(array("sess" => "Test_Session"));
?>
배열 변수(sess)는 일부 상태 저장 객체를 초기화하는 데 사용됩니다. 여기서 주의해야 할 점은 phplib 내장 이름(sess)을 사용해야 한다는 것입니다.
phplib은 쿠키를 사용하여 상태 정보를 저장하므로 페이지 내용이 브라우저에 출력되기 전에 page_open() 함수를 호출해야 합니다. PHP 스크립트는 관련 상태 데이터를 데이터베이스에 다시 쓰는 page_close()로 끝나야 합니다. 그렇지 않으면 변수가 손실됩니다.
3. 특정 용도.
변수를 등록한 후 세션이 종료될 때까지 다음 페이지에서 사용할 수 있습니다. 방법:
<?php $sess->register( "varname") ?>
여기서 varname은 변수 값이 아니라 변수 이름을 먼저 지정한 다음 값을 할당할 수 있습니다. 특정 페이지에서 변수의 값을 변경할 수 있으며, 다음 페이지에서 해당 변수에 접근하면 변경된 값을 얻게 됩니다. 변수의 유형은 다양하며 문자열, 숫자 또는 배열이 될 수 있습니다. 예:
첫 번째 페이지:
<?php
page_open(array("sess" => "_Session 테스트"));
$sess->register( "welcome"); //$welcome 변수를 등록합니다. $를 추가할 필요가 없습니다.
$welcome="안녕하세요, PHP 세계!";
…
페이지_닫기();
?>
두 번째 페이지:
<?php
page_open();//세션 시작
echo $welcome;//첫 번째 페이지에 정의된 $welcome 표시
page_close();//상태정보 저장
?>
변수를 등록한 후 페이지가 마지막으로 page_close() 함수를 호출하면 각 세션 변수가 데이터베이스에 다시 기록됩니다. page_close() 함수 호출을 잊어버리면 변수가 데이터베이스에 다시 기록되지 않으므로 예측할 수 없는 결과가 발생합니다. 변수가 사용되었고 더 이상 필요하지 않은 경우 다음 함수를 호출하여 변수를 삭제할 수 있습니다:
<?php
page_open(array("sess" => "_Session 테스트"));
…
$sess->unregister("변수_이름");
…
페이지_닫기();
?>
PHP4 버전에서는 세션을 어떻게 구현하나요?
PHP4의 세션은 또한 쿠키를 사용하여 세션 ID를 저장하고 파일 시스템을 사용하여 변수를 저장합니다(기본적으로). 따라서 해당 세션 변수는 개체를 저장할 수 없습니다. 물론 세션을 데이터베이스에 저장할 수도 있습니다.
php4에는 세션과 관련된 많은 함수가 있습니다(자세한 내용은 php.ini 구성 문서 참조). 일반적으로 session_start(), session_register(), session_is_registered() 세 가지 함수만 호출하면 됩니다.
세션이 필요한 각 페이지의 시작 부분에서 session_start() 함수를 호출합니다. 예:
<?session_start()?>
<html><본문>
<?
$welcome="안녕하세요!";
session_register("welcome");//$welcome 변수를 등록합니다. $ 기호가 없습니다. if(session_is_registered("welcome"))//$welcome 변수가 등록되었는지 확인하십시오. echo "welcome 변수가 등록되었습니다!";
또 다른
echo "웰컴 변수가 아직 등록되지 않았습니다!";
?>
</body></html>
php4에서 세션 처리를 사용자 정의하려면
6가지 함수를 확장해야 합니다.
·sess_open($sess_path, $session_name)
이 함수는 초기화를 위해 세션 핸들러에 의해 호출됩니다.
$sess_path 매개변수는 php.ini 파일의 session.save_path 옵션에 해당합니다. $session_name 매개변수는 php.ini의 session.name 옵션에 해당합니다.
·sess_close();
이 함수는 페이지 실행이 종료되고 세션 핸들러를 닫아야 할 때 호출됩니다.
·sess_read($key)
이 함수는 세션 핸들러가 지정된 세션 키 값($key)을 읽을 때 식별자를 검색하고 반환합니다. ) $key의 세션 데이터입니다. (참고: 직렬화는 프로그램 종료 시 또는 필요할 때 파일에 변수나 개체를 저장했다가 프로그램이 실행될 때 또는 다음에 필요할 때 메모리로 전송하는 기술입니다. )
·sess_write($key, $val);
이 함수는 세션 핸들러가 데이터를 저장해야 할 때 호출되는데, 이는 프로그램이 끝날 때 자주 발생합니다. sess_read($key) 함수를 사용하여 다음에 검색할 수 있는 위치에 데이터를 저장하는 역할을 담당합니다.
·sess_destroy($key);
이 함수는 세션을 파괴해야 합니다. 세션 삭제 및 환경 정리를 담당합니다.
·sess_gc($maxlifetime);
이 함수는 조각 정리를 담당합니다. 이 경우 오래된 세션 데이터를 삭제하는 역할을 담당합니다. 세션 핸들러는 가끔 이를 호출합니다.
사용자 정의 프로그램은 특정 상황에 따라 mysql 데이터베이스 또는 DBM 파일을 사용하여 세션 데이터를 저장할 수 있습니다. 지원을 위해 mysql을 사용하는 경우 다음 단계를 수행해야 합니다.
먼저 mysql에서 세션 데이터베이스를 생성하고 세션 테이블을 생성합니다.
mysql> CREATE DATABASE session;
mysql>ON 세션 선택, 삽입, 업데이트, 삭제 권한을 부여합니다.* phpsession@localhost 로
-> 'phpsession'으로 식별됩니다.
mysql> CREATE TABLE 세션(
-> sesskey char(32)는 null이 아닙니다.
-> 만료 int(11) unsigned null이 아님,
-> 값 텍스트가 null이 아닙니다.
-> 기본 키(sesskey)
-> );
다음으로, session_mysql.php 파일의 $SESS_DB* 변수를 컴퓨터의 데이터베이스 설정과 일치하도록 수정합니다.
<?
$SESS_DBHOST = "localhost"; /* 데이터베이스 호스트 이름*/
$SESS_DBNAME = "세션"; /* 데이터베이스 이름*/
$SESS_DBUSER = "phpsession"; /* 데이터베이스 사용자 이름*/
$SESS_DBPASS = "phpsession"; /* 데이터베이스 비밀번호*/
$SESS_DBH = "";
$SESS_LIFE = get_cfg_var("session.gc_maxlifetime")
……//맞춤형 함수
session_set_save_handler( "sess_open", "sess_close", "sess_read", "sess_write", "sess_destroy", "sess_gc");
?>
dbm 파일 사용 시 인터페이스 사용자 정의:
<?
$SESS_DBM = "";
$SESS_LIFE = get_cfg_var("session.gc_maxlifetime")
……//맞춤형 함수
session_set_save_handler("sess_open", "sess_close", "sess_read", "sess_write", "sess_destroy", "sess_gc");
?>
세션 맞춤형 테스트 코드:
<?php
…
if ($handler == "dbm") include("session_dbm.php");//사용할 인터페이스
elseif ($handler == "mysql") include("session_mysql.php");
그렇지 않으면...
session_start();
session_register("개수");
…
?>
인증 시 Session을 어떻게 사용하나요?
세션은 사용자 인증에 사용될 수 있습니다.
사용자가 합법적인지 확인하십시오.
<?
세션_시작();
……//검증 과정 session_register("reguser");
?>
사용자가 다른 페이지에 로그인되어 있는지 확인하십시오
<?
세션_시작();
if(isset($reguser)&&$reguser!=""){//로그인한 경우 echo "사용자 여러분, 환영합니다";
}else{//로그인되어 있지 않은 경우 echo "먼저 등록하세요!";
}
?>
사용자 로그아웃:
<?
session_destroy();
…
?>
동시에 실행되는 여러 세션을 구현하는 방법은 무엇입니까?
질문: 내 장치에 대한 구매, 판매 및 재고 시스템을 작성할 때 여러 사용자가 동시에 PHP 애플리케이션에 들어갈 수 있도록 허용해야 한다는 것을 알았습니다. 원래 설계된 정적 고유 세션 ID로 인해 데이터 혼란이 발생했습니다. 이러한 방식으로 고유한 세션 ID를 동적으로 생성하는 것이 최우선 과제가 됩니다.
해결책은 간단합니다. PHP 파일 이름 + 타임스탬프를 고유 세션 ID로 사용하여 프로그램의 각 세션이 제자리에 있고 더 이상 혼란이 없도록 했습니다.
같은 문제를 겪고 있는 친구들이 해결책을 찾을 수 있도록 아래 소스 코드를 공개하겠습니다.
//변수를 보존하기 위해 PHP 세션을 시작합니다.
if (빈($mysessionname)) {
$micro = 마이크로타임();
$micro = str_replace(" ","",$micro); // 공백을 제거합니다.
$micro = str_replace(".","",$micro); // 마침표를 제거합니다.
$mysessionname = "po_maint" $micro;
}
세션_이름($mysessionname);
session_start();
프로그램 참고사항:
페이지 간에 고유한 세션 이름에 대한 변수를 전달하려면 mysessionname을 사용하십시오. Mysessionname은 세션이 시작되기 전에 이미 존재하므로 세션의 내부 변수 이름이 될 수 없습니다. 여러 세션이 원래 쿠키 파일을 덮어쓰게 되므로 Mysessionname은 쿠키 모드로 저장할 수 없습니다. 숨겨진 양식 필드를 사용하여 저장할 수 있습니다. 그러면 문제가 없을 것입니다.