2014-05-18 3 views
2

SessionHandler 클래스를 구현하여 SessionHandlerInterface을 구현하고 있습니다. close(), destroy($session_id), gc($maxlifetime), open($save_path, $session_id), read($session_id)write($session_id, $session_data) :PHP 세션 ID를 대체합니다.

the manual에 따르면 나는 5 개 메소드를 구현해야합니다.

설명서는 샘플 구현을 제공하기도하고 아주 간단합니다.

hpuhqm4ppmdfaat5s1qmt5s397

하지만 난 더 위하여 표준화 uuidv5에 대한 그 변경하려면 : 내가 가진 유일한 문제는 PHP 세션 ID가 항상 형식은입니다.

$ session_id는 모든 메소드에 전달되는 매개 변수이므로,이를 수행하는 유일한 방법은 open($save_path, $session_id) 메소드 구현시 session_id($uuidv5)을 사용하여 이미 생성 된 세션 ID를 재정의하는 것입니다.

더 깨끗한 방법이 있습니까?

+0

Btw,'session_id ($ uuidv5)'이 당신에게 효과적이라면, 왜 옳지 않다고 생각하십니까? AFAIK는 userland 코드에서 세션 ID를 설정할 수있는 유일한 기능입니다. 세션 ID를 생성하는데 충분한 엔트로피가 있다는 것을 알아 두십시오. (화장품과 같은 이유로) 보안 문제에 부딪히지 않고 있습니다. 일반적으로 세션 ID 체계를 변경하여 세션 보안을 저하시킬 수있는 기회가 있습니다. – hakre

+0

은 최적이 아니기 때문에 직관적이지 못합니다. 어쩌면 당신이 옳고, 우선 내가 알 고를 수정하면 안된다. – NotGaeL

답변

1

더 깨끗한 방법이 있습니까?

기본 PHP 세션 ID 생성 기능을 변경하십시오. 해시를 사용하며 기본적으로 구성 가능합니다 (자세한 내용은 session.hash_function PHP ini directive 또는 session.save_handler). 기존 구성 옵션이 uuidv5 요구 사항과 일치하지 않으면 PHP 핵심 코드 나 PHP 확장을 통해 추가해야합니다.


추가 정보는 "과잉"이 될 것입니다 PHP 확장 쓰기 그것에 대해 당신은 주석에 소리를 질렀다 같이

핸들러 인터페이스 저장 유저 랜드 PHP 세션 핸들러 s_create_sid 저장 방법의 핵심 세션을 포함하지 않습니다 그것은 실제로 당신이 찾고있는 것입니다. 이 기능은 사용자 영역에서 수행되지 않으므로 사용자 영역에서 어려운 작업을 수행합니다.

세션 ID 생성은 보안의 대상이되고 PHP 핵심 개발자는 과거에 실수를하기 쉽다는 것을 이미 배웠고, 다른 사람보다 덜 신뢰한다고합니다. 그 언어를 사용하는 사람들은 여기서 세션 ID 생성을 쉽게 바꿀 수 있습니다. 그렇지 않으면 함수가 사용자 영역 세션 저장 핸들러로 내보낼 수있었습니다. 당신이 당신의 자신의 UUID를 생성 할 수 있습니다 그러나

는 단지 그들을 구성 방식으로 같은 세션 ID를를 해싱에 의해 세션 ID와 을 사용.

그런 다음 UUID 양식의 해시되지 않은 값을 세션 변수로 유지할 수 있습니다.

프런트 엔드에 실제로 UUID가 필요한 경우, 내가 말하기 쉽습니다 (SO 답변에서 말하기가 가능하다면) 당신이하는 일은 비린내가되고 나는 당신의 동기를 다시 확인하게 될 것입니다.기술적으로는 일부만 ID가 필요하므로 형식 요구 사항이 없어야하므로 기존 세션 ID를 다시 사용하지 않아도됩니다.

+0

나는 내가 사용하는 해시의 종류 만 구성 할 수 있음을 알고 있습니다. 나는 그것을 사용하고 싶은 uuidv5 algo에 설정할 수 없다. PHP 확장은 잔인한 것처럼 보입니다 ... – NotGaeL

+0

누군가가 XYZ-Super-Cooolie-Found-In-Some-Note-Algorithm을 가지고 있어야만하는 것은 내 말은 아닙니다. 메신저를 쏘지 마라. 다음을 참고하십시오 : ['session.save_handler'] (http://php.net/manual/en/session.configuration.php#ini.session.session.save_handler) (PHP 핵심 개발자의 실수도 아닙니다. 귀하의 질문에 윤곽을 나타낼 수있는 유용한 기능이라면 PHP 코어에 포함시키지 않아도됩니다.) – hakre

+0

@elcodedocle : 필자는 사용자 랜드 코드에서 쉽게 불가능한 배경 정보를 추가했습니다. – hakre

관련 문제