요즘 프로그래머들에게는 점점 더 어려워지고 있습니다. 능숙해지려면 소스를 추적해야 합니다. 이는 실제로 현재 범람하고 있는 점점 더 발전하는 언어와 수많은 프레임워크와는 정반대입니다. 그들은 원래의 사용법을 최대한 은폐하려고 합니다. 너무 단순해서 저는 개인적으로 이것을 프로그래머 학습 역설이라고 부릅니다.
참고: 저자는 약 2주 동안 웹 개발과 PHP를 접했습니다. 다음 내용은 초보자에게 적합합니다.
기사 제목을 보면
기사의 취지는 먼저 세션이 무엇인지 이해하는 것이고, Session의 용도는 무엇이며 Session은 어떻게 사용합니까? 루틴은 무엇이며 PHP에서 어떻게 사용됩니까?
시작하기 전에 먼저 프로그래머의 기본 필수 지식인 기본 이론서 『HTTP 권위 가이드』를 추천한다. 작성자 전자버전도 있고, 필요하시면 메시지 남겨주셔도 됩니다.
거의 모든 사람이 온라인에 있고, 네트워크를 통해 수십억 개의 데이터가 서로에게 안전하게 전송될 수 있는 이유. HTTP 프로토콜을 기반으로 하므로 매우 익숙하지 않나요? 실제로 HTTP 프로토콜의 역할은 네트워크 액세스를 완료하기 위한 일련의 방법을 제공하는 것입니다. 두 당사자 모두 액세스를 설정하면 원칙적으로 세션이 설정됩니다. 예를 들어 보겠습니다. Xiao Ming은 브라우저에 https://www.baidu.com/을 입력합니다(HTTPS는 SSL 암호화 계층이 추가된 HTTP의 암호화된 버전입니다). 이는 Xiao Ming이 Baidu에 보낸 요청입니다. 인터페이스를 보고 싶습니다.", Baidu의 서버는 Xiao Ming이 원하는 내용과 Xiao Ming의 주소(그렇지 않으면 Baidu는 누구에게 콘텐츠를 제공해야 할지 알 수 없음)가 포함된 메시지를 수신했으며 서버는 정보를 확인했습니다. 자, 샤오밍의 요청을 녹음하고 샤오밍이 원하는 것을 보내면 완전한 요청이 끝납니다. 대화의 핵심은 Xiao Ming의 정보 파일링에 있습니다(실제로는 TCP/IP 연결 문제도 포함되어 있어 이 기사와는 관련이 없으므로 무시하세요) .
사실 세션을 만드는 것보다 방문을 세션으로 요약하는 것이 더 좋습니다.
위 내용에서 볼 수 있듯이 모든 액세스는 세션이며, 이는 오버헤드가 있으며, 같은 사람이 10번, 20번을 연속으로 방문하고 구축하고 저장하는 경우도 있고, 다른 사람은 어리석은 경우도 있습니다. 즉, 한 사람(정확히 말하면 동일한 컴퓨터와 브라우저)이 특정 시간 내에 세션을 재사용할 수 있는 이유는 무엇일까요? 세션에는 기본 만료 시간이 있기 때문에 만료 후 서버가 삭제됩니다 (그렇지 않다면 세상에 사람이 얼마나 많아서 하나하나 보관하기가 아깝다는 생각을 해보세요).
좋아요, 동일인이므로 여러 번 방문하는 것은 세션입니다(서버가 동일인을 식별할 수 없다는 점은 의심하지 마세요. 자세한 내용은 위에서 권장하는 책을 읽어보세요). 그리고 각 방문의 내용은 모두 등록되어 있습니다. 이는 서버가 세션 주기 내의 모든 동작을 알고 있음을 의미합니다. 그런 다음 서버는 사용자의 액세스 요청을 분석하여 이를 학습할 수 있습니다. 특정 사용자의 선호도, 특정 분석을 통해 사용자가 관심을 갖고 싶어하는 일부 데이터를 푸시할 수 있습니다. 이것이 광고 타겟팅이 이루어지는 방식입니다.
물론 다른 사용자나 성능 등이 있을 수 있습니다. 개인적으로는 메커니즘을 특별히 이해하지는 못하지만 여기까지입니다.
위의 동사를 통해 실제로 Session이라는 개념이 서버 측에서 발생한다는 것을 알 수 있습니다. PHP는 세션 기능을 잘 구현하기 위해 일련의 구성, 기능 등을 제공합니다. PHP의 세션 지원은 동시 액세스 중에 특정 데이터를 저장하는 방법으로, 이를 통해 더 많은 맞춤형 프로그램을 구축하고 웹 사이트 방문자에게 세션이라는 고유 ID가 할당됩니다. 이 ID는 사용자 측의 쿠키에 저장되거나 URL을 통해 전달될 수 있습니다. 세션 지원을 통해 방문자가 방문할 때 슈퍼 전역 배열 $_SESSION 요청에 데이터를 저장할 수 있습니다. 귀하의 사이트에서 PHP는 자동으로 확인하거나(session.auto_start가 1로 설정된 경우) 귀하의 요청에 따라(session_start()를 통해 명시적으로 또는 session_register()를 통해 암시적으로) 현재 세션 ID가 이전에 전송된 요청에 의해 생성되었는지 여부를 확인합니다. 이 경우 이전에 저장한 환경이 다시 구축됩니다.
각 독립 사용자에게 고유한 세션 ID를 할당하면 여러 사용자에 대해 별도로 데이터를 저장하는 기능을 구현할 수 있습니다. 세션은 여러 페이지 요청 간에 정보를 저장하고 공유하는 데 자주 사용됩니다. 일반적으로 세션 ID는 쿠키를 통해 브라우저로 전송되고 세션 데이터도 세션 ID를 통해 서버 측에서 검색됩니다. 요청에 세션 ID 정보가 포함되어 있지 않으면 PHP는 새 세션을 생성하고 새로 생성된 세션에 새 ID를 할당합니다.
Session의 작업 흐름은 매우 간단합니다. 세션을 시작할 때 PHP는 요청에서 세션 ID를 찾으려고 시도합니다(일반적으로 세션 쿠키를 통해). 요청에 세션 ID 정보가 포함되어 있지 않으면 PHP는 새 세션을 생성합니다. 세션이 시작되면 PHP는 세션의 데이터를 $_SESSION 변수로 설정합니다. PHP가 중지되면 자동으로 $_SESSION의 내용을 읽고 직렬화한 다음 저장을 위해 세션 저장 관리자에게 보냅니다. 기본적으로 PHP는 내장된 파일 세션 저장 관리자(files
)를 사용하여 세션 저장을 완료합니다. 구성 항목 session.save_handler(php.ini의 구성 항목)를 통해 사용할 세션 저장 관리자를 수정할 수도 있습니다. 파일 세션 저장 관리자의 경우 세션 데이터는 session.save_path 구성 항목(php.ini의 구성 항목)에서 지정한 위치에 저장됩니다. session_start 함수를 호출하여 세션을 수동으로 시작할 수 있습니다. session.auto_start 구성 항목이 1
로 설정된 경우 요청이 시작되면 세션이 자동으로 시작됩니다. PHP 스크립트가 실행되면 세션이 자동으로 닫힙니다. 동시에 session_wirte_close() 함수를 호출하여 세션을 수동으로 닫을 수도 있습니다.
이 부분을 여기서 언급하는 이유는 이전 질문을 설명하지 않아도 php.ini의 구성이 무엇인지 알 수 있기 때문입니다. . 위에서 언급한 session.save_handler와 session.save_path는 php.ini의 구성 항목입니다. PHP 매뉴얼이 너무 자세하기 때문에 여기서는 자세히 설명하지 않겠습니다. 이 기사의 기본 모드는 파일입니다.
session_start()는 세션 메커니즘의 시작입니다. 세션은 현재 $_COOKIE[session_name()]이 반환되는지 여부를 결정합니다. session_id를 저장하는 COOKIE입니다. 키 값이 없으면 session_id가 생성되고, 생성된 session_id는 COOKIE 값으로 클라이언트에 전달됩니다. 이는 다음 COOKIE 작업을 수행하는 것과 같습니다. 반대로 session_id =$_COOKIE[session_name]; 이 있으면 session.save_path에 지정된 폴더로 이동하여 'SESS_'.session_id()라는 파일을 찾아서 역직렬화합니다. $_SESSION 중간에 넣으세요.
세션이 종료되면 Session 쓰기 작업을 수행하거나 session_write_close() 작업을 수동으로 수행합니다. 2. usset($_SESSION); //새로 고침 후에는 모든 $_SESSION 데이터가 삭제되지만 COOKIE는 전달되지 않습니다.
3. session_destroy(); //Delete $_SESSION 세션 파일과 session_id를 삭제합니다
부록, 끝으로 인터넷에 있는 코드 한 부분을 인용합니다.
//SESSION初始化的时候调用 function open($save_path, $session_name) { global $sess_save_path; $sess_save_path=$save_path; return(true); } //关闭的时候调用 function close() { return(true); } function read($id) { global $sess_save_path; $sess_file="$sess_save_path/sess_$id"; return (string) @file_get_contents($sess_file); } //脚本执行结束之前,执行写入操作 function write($id,$sess_data) { global$sess_save_path; $sess_file="$sess_save_path/sess_$id"; if ($fp= @fopen($sess_file,"w")) { $return=fwrite($fp,$sess_data); fclose($fp); return$return; } else { return(false); } } function destroy($id) { global $sess_save_path; $sess_file="$sess_save_path/sess_$id"; return(@unlink($sess_file)); } function gc($maxlifetime) { global$sess_save_path; foreach (glob("$sess_save_path/sess_*") as$filename) { if (filemtime($filename) +$maxlifetime<time()) { @unlink($filename); } } return true; }
위 내용은 간단한 PHP 세션 설명 내용입니다. PHP 중국어 웹사이트(m.sbmmt.com)를 팔로우하세요!