PHP Session ID의 구현 원리와 실례

3428 단어 PHPSessionID

Session 역할


Session의 근본적인 역할은 서버에 사용자와 서버 세션의 정보를 저장하는 것이다.일반적인 어플리케이션은 다음과 같습니다.
1. 사용자의 로그인 여부를 판단한다.
2. 카트 기능.

session의 작업 메커니즘:


모든 방문자에게 유일한 id(UID)를 만들고 이 UID를 기반으로 변수를 저장합니다.UID는 쿠키에 저장되거나 URL을 통해 전달됩니다.

PHPSESSIONID의 운영 알고리즘 원리:


1、hash_func = md5/sha1 # 는 php에서 사용할 수 있습니다.ini 구성
2、PHPSESSIONID = hash_func(클라이언트 IP + 현재 시간(초) + 현재 시간(미묘) + PHP 자체 랜덤 생산기)
이상에서hash_func(*)의 데이터 샘플링 값에 대한 내용 분석은 여러 사용자가 같은 서버에서 생산한 PHPSESSIONID가 중복될 확률이 매우 낮다.
또한 해커가 한 사용자의 PHPSESSIONID를 알아맞히려면'클라이언트 IP, 현재 시간(초, 미묘), 무작위 수'등 데이터를 알아야 시뮬레이션할 수 있다.

php.ini 구성은 다음과 같습니다.


; http://php.net/session.hash-function
session.hash_function=0

PHP 세션 작동 방식


다음은 PHPSESSID 설명을 쿠키로 전송합니다.
1. 클라이언트가 php의 서버 주소를 요청합니다.
2. 서버가 요청을 받았습니다. 이번 php 스크립트에session_start().
3. 서버는 PHPSESSID를 생성합니다.(기본 session 저장 방식은 session.save_handler=files이고 파일 형식으로 저장됩니다. 생성된 session 파일 이름 규칙은 sess_PHPSESSID이고 session 파일은 session.save_path에 있습니다.)
4. 서버 응답 첫 번째 Response Headers:Set-Cookie:PHPSESSID=37vjasgjdv2ouk1uomhgqkv50;path=/.클라이언트에서 이 PHPSESSID를 저장하는 쿠키를 생성합니다.
5. 이때 클라이언트의 쿠키에는 PHPSESSID가 포함되어 있습니다. 이후 클라이언트의 매번 요청은 첫 번째 Request Headers: Cookie: PHPSESSID=37vjjasgjdv2ouk1uomhgqkv50입니다.서버가 클라이언트의 요청을 받을 때마다 이 PHPSESSID에 따라 서버의session 파일을 찾을 수 있습니다. 이session 파일에 대한 읽기와 쓰기를 통해session의 초전역 변수 속성을 실현합니다.
만약 클라이언트가 쿠키를 사용하지 않는다면, 쿠키를 사용하여 PHPSESSID를 전달할 수 없기 때문에, 클라이언트가 요청할 때마다 서버는 세션 파일을 다시 만들고, PHPSESSID를 통해session 파일을 다시 사용할 수 없기 때문에session도 효력을 잃게 됩니다.
이 경우 세션을 설정할 수 있습니다.use_trans_sid는 PHPSESSID를 전송하는데 구체적인 실현 방식과 쿠키의 차이점은 PHPSESSID를 HTTP의 GET를 통해 전송하는 것이다.
session.use_cookies = 0//클라이언트가 session 값을 저장하기 위해 쿠키를 사용할지 여부를 설정합니다. 이 매개 변수의 값은 상기 메커니즘의 진행에 영향을 주지 않습니다.
그러나 이 메커니즘을 검증하기 위해 이 매개 변수를 0으로 설정하고 쿠키가 seesionid를 가지고 있을 가능성을 배제합니다
session.use_only_쿠키 = 0///쿠키만 사용하여session 값을 저장하는지 여부입니다. 이 인자가 1인 경우 상기 메커니즘이 효력을 상실합니다.
세션을 설정합니다.use_trans_sid = 1 또는 컴파일할 때 열었습니다. --enable-trans-sid는 요청한 주소마다 PHPSESSID 인자를 모두 추가합니다. "url?"PHPSESSID=37vjjasgjdv2ouk1uomhgqkv50'을 구현합니다.

PHPcli 모드 통과session_id () session 사용


이를 통해 현재 세션의 PHPSESSID를 가져오거나 현재 세션의 PHPSESSID를 설정할 수 있습니다.
PHPcli 모드에서는 이것을 설정하여session을 사용하는 목적을 달성할 수 있어 매우 편리합니다.
예:

<?php

// session_id('vingbrv8m64asth0nhplu9gmb7');

session_start();

$_SESSION[md5(rand(100,999))] = rand(100,999);

var_dump($_SESSION);

세션 인스턴스 문제


기존 시스템 A, B;가령 A시스템이 독립적으로 실행할 수 있는 웹 시스템, 즉 브라우저와 직접session을 처리할 수 있고 B시스템은 모바일을 바탕으로 하기 때문에 A시스템의 기능 인터페이스를 호출해야 한다.
A가 변하지 않는 상태, 즉 로그인 검증, 세션 저장소가 변하지 않는 상황에서 B 시스템은 전방 사용자의 요청을 처리할 수 있다.
여기에서 제공하는 방안은 PHP를 사용하여 실현하는 것이다
사용자 로그인이 성공하면 저장된 세션의session-id를 B시스템으로 되돌려주고 B시스템은 다른 인터페이스를 요청할 때마다session_id.
A시스템은session_시작 전에 세션 추가_id(session_id);
이렇게 하면 B 시스템이 안전하게 A를 호출할 수 있다

session 보안 문제


session_id는 쿠키에 저장됩니다. 우선session은 활동하면 기한이 지나지 않는 것입니다. 쿠키를 열면 세션마다session_id는 변하지 않습니다.session_에 따라id는 사용자가 정상적으로 로그인했는지 판단하고 사용자가 세션을 위조하는 것을 방지합니다.그리고 우리도 세션이 납치되는 것을 방지해야 한다. 우리는 세션에 대해_id를 다시 한 번 암호화하여 폭력적인 해독을 방지하고 HttpOnly를 설정할 수 있습니다.쿠키의 HttpOnly를true로 설정하면 클라이언트 스크립트가 이 쿠키에 접근하는 것을 방지하여 XSS 공격을 효과적으로 방지할 수 있습니다.
다음은 PHP Session ID의 실현 원리와 실례에 대한 상세한 내용입니다. PHP Session ID에 대한 더 많은 자료는 저희 다른 관련 글을 주목해 주십시오!

좋은 웹페이지 즐겨찾기