php教程 PHP开发 PHP에서 세션 구현 원리와 대형 웹사이트 적용시 주의할 점을 분석한다.

PHP에서 세션 구현 원리와 대형 웹사이트 적용시 주의할 점을 분석한다.

Dec 13, 2016 am 11:58 AM
session

PHP SESSION 원리
우리는 세션이 서버 측에서 사용자 세션 데이터를 유지하는 방법이라는 것을 알고 있으며, 해당 쿠키는 클라이언트 측에 사용자 데이터를 유지합니다. HTTP 프로토콜은 서버가 응답한 후 브라우저와의 연결이 끊어지는 프로토콜입니다. 클라이언트에 의해 페이지 간에 데이터가 교환될 수 있는데, 서버는 어떻게 많은 사용자의 세션 데이터를 기억합니까?

우선 클라이언트와 서버가 각각 하나씩 접속되어야 합니다. 각 클라이언트에는 서버가 식별할 수 있도록 고유한 식별자가 있어야 합니다. 고유 식별에는 쿠키 또는 GET을 통해 지정하는 두 가지 방법이 있는 것이 좋습니다. PHP의 기본 구성은 세션을 사용합니다. "PHPSESSID"라는 쿠키가 생성됩니다(php.ini에서 session.name 값을 수정하여 지정할 수 있음). 클라이언트가 쿠키를 비활성화하면 GET을 통해 검색할 세션을 지정할 수도 있습니다. 해당 ID가 서버로 전송됩니다(php.ini에서 session.use_trans_sid와 같은 매개변수 수정).

서버측 session.save_path 디렉터리를 확인해보면 sess_vv9lpgf0nmkurgvkba1vbvj915와 유사한 파일을 많이 찾을 수 있습니다. 실제로는 세션 ID "vv9lpgf0nmkurgvkba1vbvj915"에 해당하는 데이터입니다. 진실은 여기에 있습니다. 클라이언트는 세션을 진행할 것입니다. ID는 서버에 전달되며 서버는 세션에 따라 다릅니다. id로 해당 파일을 찾습니다. 읽을 때 파일 내용을 deserialize하여 세션 값을 가져옵니다. 저장 시 먼저 serialize한 후 씁니다.

이것이 사실입니다 이처럼 서버가 세션을 지원하지 않거나 세션을 맞춤화하고 싶다면 PHP의 uniqid를 통해 절대 반복되지 않는 DIY 세션을 생성할 수 있습니다. id를 찾은 다음 세션 내용을 저장할 장소를 찾으십시오. 또한 MySQL 데이터베이스에 세션을 저장하는 방법을 flickr에서 배울 수도 있습니다.

세션을 사용하기 전에 session_start()를 실행해야 하는 이유는 무엇인가요?
원리를 이해한 후에 소위 세션은 실제로 클라이언트 측의 세션 ID이고 서버 측의 세션입니다. 새 세션을 생성하기 전에 session_start()를 실행하면 서버에 쿠키를 심고 세션 파일을 준비하라고 지시합니다. 그렇지 않으면 세션 내용을 저장하는 방법, 세션을 읽기 전에 session_start()를 실행하면 서버가 세션을 빠르게 따르도록 지시합니다. id는 세션 파일을 역직렬화합니다.

session_start() 전에는 하나의 세션 함수만 실행할 수 있습니다. session_name(): 세션 이름을 읽거나 지정합니다(예: 기본값은 "PHPSESSID"입니다). 물론 이것은 session_start 전에 실행되어야 합니다.

세션이 시스템 성능에 영향을 미칩니다
세션 트래픽 양이 많은 웹사이트에서는 시스템 성능이 실제로 영향을 받습니다. 성능에 영향을 미치는 이유 중 하나는 동일한 디렉터리에 10,000개 이상의 파일이 있는 경우 PHP 지원에 매우 많은 시간이 소요됩니다. 세션 디렉토리 해시, php.ini에서 session.save_path =를 수정할 수 있습니다. "2;/path/to/session/dir"이면 세션은 2단계 하위 디렉터리에 저장되며 각 디렉터리에는 16개의 하위 디렉터리 [0~f]가 있지만 PHP는 세션은 디렉터리 생성을 지원하지 않습니다. 해당 디렉터리를 미리 생성해야 합니다.

또 다른 문제는 작은 파일의 효율성입니다. 세션 데이터는 너무 크지 않습니다(1~2K). 디스크에 1~2K 파일이 많으면 IO 효율성이 매우 떨어지게 됩니다. PHP 매뉴얼에서는 Reiserfs 파일 시스템을 사용할 것을 권장합니다. 하지만 Reiserfs의 미래는 걱정스럽습니다. Reiserfs의 작성자는 아내를 죽였고 SuSE도 Reiserfs를 버렸습니다.

사실 더 많아요 세션을 저장하는 방법은 php -i|grep "Registered save handlers"를 통해 확인할 수 있습니다. 예: Registered save 핸들러 => 파일 사용자 sqlite eaccelerator는 파일, 사용자, sqlite, eaccelerator를 통해 저장할 수 있습니다. 서버에 memcached를 설치하면 mmcache도 있습니다. 옵션. 물론 MySQL, PostgreSQL 등과 같은 더 많은 것들이 있습니다. 모두 좋은 선택입니다.

세션 동기화
우리 프런트 엔드에는 여러 개의 서버가 있을 수 있습니다. 사용자는 서버 A에 로그인하고 세션 정보를 심은 다음 웹 사이트의 일부 페이지에 액세스하여 서버 B로 이동했을 수 있습니다. time 서버에 세션 정보가 없고 특별한 처리가 이루어지지 않으면 문제가 발생할 수 있습니다.
세션 동기화에는 여러 종류가 있는데, memcached나 MySQL에 저장하면 아주 쉽습니다. 파일 형태라면 NFS를 이용해서 균일하게 저장할 수 있습니다.

또 다른 방법은 암호화된 쿠키를 사용하는 것입니다. 사용자가 서버 A에 성공적으로 로그인하면 사용자가 서버 B를 방문할 때 암호화된 쿠키가 있는지 확인합니다. 세션이 존재한다면 당연히 문제가 없습니다. 그렇지 않다면 쿠키가 유효한지 확인하십시오. 쿠키가 유효한 경우 서버 B에서 세션을 다시 설정하십시오. 이 방법은 실제로 꽤 웹사이트에 하위 채널이 많고 서버가 동일한 컴퓨터실에 있지 않으며 세션을 동기화할 수 없고 균일하게 로그인하려는 경우 매우 유용합니다.

물론 다른 방법도 있습니다 로드 밸런싱 계층에서 세션을 유지하고 방문자를 특정 서버에 바인딩합니다. 방문자의 모든 방문은 해당 서버에 있으며 세션 동기화가 필요하지 않습니다. 이는 모두 운영 및 유지 관리 수준의 것입니다. 이것만 말해봐 너무 많기 때문에 자신의 응용 프로그램에 따라 세션을 사용하도록 선택하십시오. 세션이 시스템 성능에 영향을 미친다고 해서 문제를 해결하는 것이 관건입니다. , 당신은 여기에 적합하지 않습니다.


본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

인기 기사

R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
4 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
4 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 아무도들을 수없는 경우 오디오를 수정하는 방법
4 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25 : Myrise에서 모든 것을 잠금 해제하는 방법
1 몇 달 전 By 尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

SpringBoot 세션에서 세션 시간 초과를 설정하는 방법 SpringBoot 세션에서 세션 시간 초과를 설정하는 방법 May 15, 2023 pm 02:37 PM

springboot 프로젝트 프로덕션 세션아웃 시간 초과에서 문제가 발견되었습니다. 문제 설명: 테스트 환경에서는 세션아웃 구성이 적용되었는지 확인하기 위해 application.yaml을 변경하여 세션아웃을 구성했습니다. , 프로덕션 환경에 도착하면 만료 시간이 8시간으로 직접 설정되었습니다. 그런데 정오에 고객으로부터 프로젝트 만료 시간이 짧게 설정되어 있다는 피드백을 받았습니다. 30분 동안 아무 작업도 수행하지 않으면 세션이 만료되어 반복 로그인이 필요합니다. 개발 환경 처리 문제를 해결합니다. springboot 프로젝트에는 Tomcat이 내장되어 있으므로 프로젝트의 application.yaml에 구성된 세션 아웃이 효과적입니다. 프로덕션 환경: 프로덕션 환경 릴리스는 다음과 같습니다.

세션 실패를 해결하는 방법 세션 실패를 해결하는 방법 Oct 18, 2023 pm 05:19 PM

세션 실패는 일반적으로 세션 수명 만료 또는 서버 종료로 인해 발생합니다. 해결 방법은 다음과 같습니다. 1. 세션 수명을 연장합니다. 3. 쿠키를 사용합니다. 4. 세션 관리 미들웨어를 사용합니다.

PHP 세션 교차 도메인 문제에 대한 솔루션 PHP 세션 교차 도메인 문제에 대한 솔루션 Oct 12, 2023 pm 03:00 PM

PHPSession의 도메인 간 문제 해결 프런트엔드와 백엔드 분리 개발에서 도메인 간 요청이 표준이 되었습니다. 도메인 간 문제를 처리할 때 일반적으로 세션 사용 및 관리가 포함됩니다. 그러나 브라우저 원본 정책 제한으로 인해 기본적으로 도메인 간에 세션을 공유할 수 없습니다. 이 문제를 해결하려면 도메인 간 세션 공유를 달성하기 위한 몇 가지 기술과 방법을 사용해야 합니다. 1. 도메인 간 세션을 공유하기 위한 쿠키의 가장 일반적인 사용

새로 고침 후 PHP 세션이 사라지면 어떻게 해야 합니까? 새로 고침 후 PHP 세션이 사라지면 어떻게 해야 합니까? Jan 18, 2023 pm 01:39 PM

새로 고침 후 PHP 세션이 사라지는 문제에 대한 해결 방법: 1. "session_start();"를 통해 세션을 엽니다. 2. 모든 공개 구성을 PHP 파일에 작성합니다. 3. 변수 이름은 배열 첨자와 같을 수 없습니다. 4. phpinfo에서 세션 데이터의 저장 경로를 확인하고 파일 디렉터리의 sessio가 성공적으로 저장되었는지 확인합니다.

세션 PHP의 기본 만료 시간은 얼마입니까? 세션 PHP의 기본 만료 시간은 얼마입니까? Nov 01, 2022 am 09:14 AM

세션 PHP의 기본 만료 시간은 1440초(24분)입니다. 즉, 클라이언트가 24분 이상 새로 고치지 않으면 사용자가 브라우저를 닫으면 현재 세션이 만료되고 세션이 종료됩니다. 세션이 더 이상 존재하지 않습니다.

Springboot2 세션 시간 초과 설정이 잘못된 문제를 해결하는 방법 Springboot2 세션 시간 초과 설정이 잘못된 문제를 해결하는 방법 May 22, 2023 pm 01:49 PM

문제: 오늘 프로젝트에서 설정 시간 초과 문제가 발생했으며 SpringBoot2의 application.properties에 대한 변경 사항이 적용되지 않았습니다. 해결 방법: server.* 속성은 SpringBoot에서 사용하는 내장 컨테이너를 제어하는 ​​데 사용됩니다. SpringBoot는 ServletWebServerFactory 인스턴스 중 하나를 사용하여 서블릿 컨테이너의 인스턴스를 생성합니다. 이러한 클래스는 server.* 속성을 사용하여 제어되는 서블릿 컨테이너(tomcat, jetty 등)를 구성합니다. 애플리케이션이 Tomcat 인스턴스에 war 파일로 배포되면 server.* 속성이 적용되지 않습니다. 적용되지 않습니다.

JavaScript와 PHP 쿠키의 차이점은 무엇입니까? JavaScript와 PHP 쿠키의 차이점은 무엇입니까? Sep 02, 2023 pm 12:29 PM

JavaScript쿠키 JavaScript 쿠키를 사용하는 것은 선호도, 구매, 커미션 및 기타 정보를 기억하고 추적하는 가장 효과적인 방법입니다. 더 나은 방문자 경험이나 웹사이트 통계를 위해 필요한 정보입니다. PHPCookieCookies는 클라이언트 컴퓨터에 저장되고 추적 목적으로 보관되는 텍스트 파일입니다. PHP는 HTTP 쿠키를 투명하게 지원합니다. JavaScript 쿠키는 어떻게 작동하나요? 귀하의 서버는 쿠키 형태로 방문자의 브라우저에 일부 데이터를 보냅니다. 브라우저는 쿠키를 허용할 수 있습니다. 존재하는 경우 방문자의 하드 드라이브에 일반 텍스트 기록으로 저장됩니다. 이제 방문자가 사이트의 다른 페이지에 도달하면

Redis 공유 세션 애플리케이션에서 SMS 로그인을 구현하는 방법 Redis 공유 세션 애플리케이션에서 SMS 로그인을 구현하는 방법 Jun 03, 2023 pm 03:11 PM

1. 세션 기반 SMS 로그인 구현 1.1 SMS 로그인 흐름도 1.2 SMS 인증코드 전송 구현 프런트엔드 요청 설명: 요청 방법 설명 POST 요청 경로/사용자/코드 요청 매개변수 전화(전화번호) 반환 값 백엔드 인터페이스 없음 구현: @Slf4j@ ServicepublicclassUserServiceImplextendsServiceImplimplementsIUserService{@OverridepublicResultsendCode(Stringphone,HttpSessionsession){//1인 경우 휴대폰 번호를 확인합니다.

See all articles