php 세션 분석...펌
PHP는 세션, 세션 분석의 특정 사용
에 대한 상대적으로 안전보다 여왕의 PHP는 세션 쿠키 세션, 그리고 데이터의 길이 제한이 있습니다.우리는 세션의 지식의 PHP가 세션 모든 사람을 향상시키기 위해 몇 가지 지식의 PHP 세션 세션에 대해 오늘 당신에게 소개합니다.
세션은 서버쪽에 저장된 텍스트 파일이기 때문에, 그래서 세션이 클라이언트의 내용을 수정하는 걸 두려워하지 않습니다.서버 쪽에서 세션 사실 파일을 PHP가 자동으로 유일한 시스템은 읽기 및 쓰기 권한을 유지, 파일 사용 권한을 수정 세션 정말 안전, FTP를 통해 수정할 수 없습니다.
쿠키, 우리는 사용자가 로그인되어 있는지 확인 할 것 같아, 당신은 사용자 이름과 암호 (있는 md5 암호화 문자열 수 있음)에서 쿠키, 페이지가 확인을 위해 요청되는 각 시간을 저장해야합니다.사용자 이름과 암호가 데이터베이스에 저장하는 경우 데이터베이스에 추가적인 부담을 초래, 데이터베이스 쿼리 때마다을 수행합니다.한 번만 우리가 확인할 수 없기 때문에.왜? 쿠키에 클라이언트 정보를 수정할 가능성이 있기 때문에.당신이 나타내기 위해 $ 관리자 변수를 저장하는 경우 사용자 로그인 여부, 달러 관리자 방문했다 때 거짓, 검증을위한 기록 시간은 최초의 진정한 $ 관리 동등한 쿠키에 저장, 다음 번에 확인하지 않아도 될 것은 사실입니다이 권리는? 잘못 누군가가 즉시 관리 기관에 그것? 매우 안전 찍은되지 $ 관리 변수에 진실의 가치를 위조하는 경우.
PHP의 세션은 다른 세션은 세션은 서버쪽에 저장, 원격 사용자는 파일의 세션의 내용을 수정할 수 없습니다, 그래서 우리는 간단하게 착륙, 첫 번째 유효성 검사의 통로 달러를 관리자로 설정 후 여부를 확인하는 달러 관리자 변수를 저장할 수있는 사실입니다나중에 당신이 데이터베이스 작업을 많이 절약할 수, 로그인 화면으로, 그렇지 않다면 그 값은 사실 여부를 확인합니다.그리고 쿠키를 확인하는 비밀 번호와의 불안을 통과하는 시간을 줄일 수 있습니다 (세션 인증이 SSL 보안 프로토콜을 그것을 사용하지 않는 경우, 한번만 통과해야합니다.)에도의 MD5 암호화된 비밀 번호는 쉽게 가로채 경우.
물론, 제어 등 쉽게 세션을 사용하여 많은 장점은, 사용자 정의 스토리지 (데이터베이스에 저장)에 따라,이 있습니다.내가 여기서 말하 지마.
PHP는 세션 세션는 php.ini에서 설정해야합니까? 일반적으로 불필요한, 아니 모두가 php.ini 파일을 수정할 권한을 갖고 있기 때문에, 기본 저장 경로는 시스템 임시 폴더의 서버 세션입니다, 우리는 사용자 정의할 수 있습니다 저장자신의 폴더에, 내가 나중에 소개합니다.
시작 세션을 만드는 방법을 설명합니다.정말 아주 간단해.
시작 세션 세션, 그리고 달러 관리자 변수를 만듭니다 :
/ / 시작 세션이 session_start (); / / 관리자라는 이름의 변수를 선언하고 null 값을 할당합니다.$ _SESSION [ "관리자"] = null을;?
당신은 세션 변수를 호출 Seesion, 또는 PHP 파일을 사용하는 경우 다음 session_start () 함수를 사용하여 PHP가 세션 세션이 그 전에 시작되어야합니다 호출합니다.당신이 다른 세트를, PHP는 세션 파일이 자동으로 만들어집니다 필요하지 않습니다.
이 절차를 수행하면, 우리는 세션 파일을 양식의 일반적으로 파일 이름을 찾으려면 시스템 임시 폴더로 이동할 수 있습니다 : 임의의 32 비트 인코딩된 문자열 다음에 sess_4c83638b3b0dbf65583181c2f89168ec.편집장이 그것을 열 수있는, 그 내용을 봐 :
관리자 | 없음;
콘텐츠의 일반적인 구조는 다음과 같습니다 :
변수 이름 | 종류 : 길이 : 값;
각 변수는 세미콜론으로 구분.일부는 길이와 종류 등 생략할 수 있습니다.
우리는 가정, 확인 과정 봐되는 데이터베이스 저장소 사용자 이름과있는 md5 암호화된 비밀 번호 :
제출된 login.php / / 폼 ... $ 게시물 = $ _POST 자동을가; / / foreach 일부 공백을 제거 ($ $로 게시물 키 = $ 값) {$ [$ 키를] 게시물 = ($ 값) 장식;} $ 암호 =있는 md5 ($ 게시물은 [ "비밀 번호"]); $ 사용자 이름 = $ 게시물은 [ "username"을]을; $ 쿼리 = "선택`이름`로부터`사용자`어디`비밀 번호`= '$ 비밀 번호' "; / / 얻을 쿼리 결과 $ userInfo = $ DB를 - getRow ($ 쿼리); 경우 경우 {($ userInfo (빈 ($ userInfo)!) ["사용자 이름 "] == $ 사용자 이름) {// 확인되면, PHP는 세션 Sessionsession_start ()를 시작합니다; / / 최대 관리자 로그인 변수의 성공과 진정한 $ _SESSION를 할당 [ "관리자"]은 = 사실;} 다른 {( "사용자 이름 비밀 번호 오류") 다이;}} {다른 사람 ( "사용자 이름 비밀 번호 오류 ");}? 죽어
우리가 착륙 여부를 확인, 사용자 인증 페이지가 세션을 시작할 필요가있다 :
/ / 전역 변수로 인한 안전 문제를 방지하려면 $ 관리 = false를; / / 세션을 시작,이 단계) (session_start하는 것이 필수적입니다; / / 로그인이 경우 (isset가 ($ _SESSION는 [ "관리자"] 여부를 확인) & & $_SESSION [ "관리자"]은 === 사실) { "당신은 성공적으로 착륙있다"에코;} 또 {/ / 유효성 검사 실패, $ _SESSION은 [는 "관리자"]은 false $ _SESSION로 설정 "관리자"[] = false를, ( "당신이 액세스 ");}? 가 없어 죽어
그것은 간단하지 않다?서버 측면에 저장된 $ _SESSION 배열이 될 수 있듯이, 우리는 아무 차이 배열과 함께 주요 변수 각각의 배열입니다 등록 가능합니다.
당신은 어떻게 할 수있는 시스템을 로그오프하고 싶다면?세션 PHP는 세션이 파괴될 수 있습니다.
이 session_start (); / /이 메소드는 변수를 해제 (_SESSION는 [ "관리자"] 달러)의 원래 등록의 파괴이다; / /이 메소드는 session_destroy ();? 전체 세션 파일의 파괴입니다
그것으로 생활주기를 설정할 수 있습니다 세션 쿠키?세션 쿠키를 완전히 포기할지 여부?내가 쿠키가 가장 편리 세션을 사용과 함께, 말하고 싶습니다.
세션에서는 무엇 클라이언트 사용자에게 확인하는 것입니다?그것은 세션 ID가 무엇인지 확인하기 위해 세션 ID를 통해, 따라서 독창성과 임의성, 세션의 안전을 위해 확보, 세션은 세션 ID가 임의로 생성되는 파일의 이름입니다.당신의 생명주기를 설정하지 않으면 일반 세션은 세션 ID는 가까운 ID는, 다시 요청 페이지, 다시 세션 ID를 등록하면 자동적으로 취소 브라우저 메모리에 저장됩니다.
클라이언트가 쿠키, 세션 ID와 세션 서바이벌 역할을 저장되어있는 PHP가 세션을 재생하는 쿠키 세션 시작 시간 해제되지 않는 경우.
우리가 수동으로 세션의 수명을 설정해야합니다 :
session_start (); "이기에, setcookie을 (session_name (), session_id (), 시간 () + $ 일생; / / 일생 = 24 백업 휴지통 conf의 구성 데이터 eshow_sitemap.html generate.sh 로그 maint sitemap.html svn의 tmp를 3600 일 달러를 저장하기;/");?
사실 세션에서 역시 함수 session_set_cookie_params ()를 제공한다, 함수는 호출하기 전에 () 함수 호출을 session_start해야 세션의 생존을 설정할 수 :
/ / 평생 = 24 백업 휴지통 conf의 구성 데이터 eshow_sitemap.html generate.sh 로그 maint sitemap.html svn의 tmp 디렉토리를 3600 일 달러를 저장, session_set_cookie_params을 ($ 일생); session_start (); $ _SESSION는 [ "관리자"]은 = 사실;?
클라이언트가 사용하는 경우 6.0 session_set_cookie_params ()를 인터넷 익스플로러; 함수는 쿠키 몇 가지 문제가 될 세트를, 그래서 우리가 수동으로 쿠키를 만들은 setcookie 함수를 호출합니다.
사용 안함 쿠키는 어떻게 할 수있는 클라이언트를 취하다?말도 안돼, 모든 생활주기 한번 페이지가 또 다시 최대의 PHP 세션 세션 요청, 그냥 브라우저를 닫고, 브라우저 프로세스입니다.그럼 세션 ID에게 그것을 전달?URL 또는 숨겨진 양식을 통과하면, PHP는 자동으로 양식의 세션 ID에 URL을 URL로 전송됩니다 :? http://www.openphp.cn/index.php ...이 담겨있는 URL의 매개 변수는 PHPSESSID E5b44cfa01d49cf9669를세션 ID, 우리는 순서대로 페이지 사이에 전달되는 세션 ID를 달성하기 위해, 가치를 얻으려면 _GET $를 사용할 수 있습니다.
/ / 평생 = 24 백업 휴지통 conf의 구성 데이터 eshow_sitemap.html generate.sh 로그 maint sitemap.html svn의 tmp 디렉토리를 3600 일 달러를 저장, / / 현재 세션를 잡아, 기본값은 $ sessionName을 = session_name () PHPSESSID이다; / / 세션 ID를 얻을달러 sessionID = $ [$ sessionName]을 _GET; / / 세션 ID session_id ($ sessionID)에 대한 액세스를 설정하는) session_id을 (사용, session_set_cookie_params ($ 일생); session_start (); $ _SESSION는 [ "관리자"]은 = 진정한;? 를;
모든 사용자는 PHP 세션 세션 시스템 임시 폴더에 저장되어있다면 가상 호스트에 대한,,하지만 어려움 유지가 발생할 것이며, 또한 우리가 수동으로 제공하는 세션 파일) 경로를 session_save_path (일본 설정할 수 있습니다, 보안을 감소이러한 기능.우리는 물론, 웹 폴더에 액세스할 수없는 세션에 대한 디렉토리 포인트를 저장할 수있는 폴더가 읽기 있어야 재산권를 써주세요.
/ / 설정 상점 카탈로그 최고 $ savePath = "는 / Session_save_dir은 /."; session_save_path ($ savePath을; / / 일생 = 24 백업 휴지통 conf의 구성 데이터 eshow_sitemap.html generate.sh 로그 maint sitemap.html svn의 tmp를 3600 일 달러를 저장하기); session_set_cookie_params ($ 일생); session_start (); $ _SESSION는 [ "관리자"] = true로;? 를
session_set_cookie_params ()로, 함수로, session_save_path () 함수는 ()를 호출하기 전에 함수 호출을 session_start해야합니다.
우리는 또한 배열 세션의 PHP는 세션에 저장되어있는 개체 수 있습니다.운영 및 배열의 작업이 있으며, 일반적인 변수 사이에 차이점은 무엇입니까 후 (또한 직렬화 함) 개체를, PHP는 자동적으로 직렬화됩니다 객체를 저장한 다음 세션에 저장됩니다.다음 예제는이 지점을 보여줍니다 :
person.php
클래스 사람
{
나이가 $ var;
출력 함수 () {
$이 - 시대를 반향;
}
함수 setAge ($ 연령) {
$이 - 나이 = $ 연령;
}
}
?
setage.php
session_start ();
require_once "person.php";
$ 사람 = 새로운 사람 ();
$ 지명 setAge (21);
$ _SESSION [ '사람'] = $ 사람;
"출력 나이하려면 여기를 확인"에코;
?
output.php
/ / 설정 콜백 함수는 다시 개체를 만들 수 있도록합니다.
위해서는 ini_set ( 'unserialize_callback_func', 'mycallback');
함수 mycallback ($ 클래스) {
include_once $ 클래스 "PHP를..";
}
session_start ();
$ 사람 = $ _SESSION [ "사람"];
/ / 출력 21
$ 사람 - 출력 ();
?
우리가 setage.php 파일이라는 setage () 메서드를 수행하면, 21의 나이를 설정하고 상태가 (자동으로 전환을 완료할 것이다 PHP는)의 세션에 저장되어있는 시퀀스 후, 언제 output.php에나중에, 출력 값이 있으며, 정지해 개체 deserialized로 우리가 콜백 함수를 정의할 후 솔루션 직렬화하기 때문에 필요가 정의되지 않은 클래스의 인스턴스를하면 클래스 파일이 자동으로 person.php가 포함되어 있습니다따라서 개체는, 21의 현재 나이의 가치를 구하려면 다음 전화를 출력 () 출력 값으로 방법과, 복원됩니다.
또한, 우리는 호출은 PHP 세션 session_set_save_handler 세션 기능을 사용자 지정하는 데 사용할 수 있습니다.