>백엔드 개발 >PHP 튜토리얼 >Laravel의 Sessionid 처리 메커니즘에 대한 자세한 소개

Laravel의 Sessionid 처리 메커니즘에 대한 자세한 소개

巴扎黑
巴扎黑원래의
2017-09-14 10:18:491611검색

이 글은 주로 라라벨의 Sessionid 처리 메커니즘에 대한 관련 정보를 소개하고 있으며, 샘플 코드를 통해 매우 자세하게 소개되어 있습니다. 학습이나 업무에 필요한 모든 분들은 아래 에디터를 참고하시기 바랍니다. 와서 함께 배우세요.

머리말

이 글은 주로 Laravel의 Sessionid 처리 메커니즘에 대한 관련 내용을 소개하고 참고 및 학습을 위해 공유합니다. 아래에서는 자세한 내용을 살펴보겠습니다. 소개.

Session Cookie Name은 Laravel의 구성 파일 config/session.php에서 설정할 수 있습니다. 예를 들어 이 프로젝트에서는 이름이 "sns_session"으로 설정되어 있습니다.


/*
|--------------------------------------------------------------------------
| Session Cookie Name
|--------------------------------------------------------------------------
|
| Here you may change the name of the cookie used to identify a session
| instance by ID. The name specified here will get used every time a
| new session cookie is created by the framework for every driver.
|
*/
 
'cookie' => 'sns_session',

페이지를 새로 고치고 쿠키를 보면 이름을 찾을 수 있습니다. sns_session의 쿠키에는 당사가 사용자 정의한 이름이 있습니다.

이 세션 ID는 쿠키와 세션 사이의 브리지입니다. 서버는 이 세션 ID를 사용하여 요청이 어느 클라이언트에서 왔는지 확인합니다.

Laravel의 세션 ID는 새로 고칠 때마다 변경됩니다.

그러나 페이지가 새로 고쳐질 때마다 이 쿠키 값이 변경됩니다! 그렇다면 서버는 어떻게 세션을 유지합니까? 세션 ID가 항상 변경되기 때문입니다.

Laravel은 쿠키를 암호화합니다.

Vendor/laravel/framework/src/Illuminate/Session/Store.php의 save 메소드에서 디버깅하고 여기에 호출 스택을 인쇄해 보겠습니다. 페이지가 새로 고쳐질 때마다 이 Store 개체의 id 속성은 실제로 변경되지 않습니다. 이 속성은 sessionid 쿠키의 값입니다. 즉, sessionid 값은 매번 바뀌지 않지만, 쿠키가 기록될 때 값이 변경됩니다.


이유는 Vendor/laravel/framework/src/Illuminate/Cookie/Middleware/EncryptCookies.php의 encrypt 메소드에서 발견되었습니다. 이 미들웨어는 모든 쿠키 값을 암호화하며 웹 미들웨어에 포함되어 있습니다.

/**
 * {@inheritdoc}
 */
public function save()
{
 $this->addBagDataToSession();
 
 $this->ageFlashData();
 
 $this->handler->write($this->getId(), $this->prepareForStorage(serialize($this->attributes)));
 
 $this->started = false;
 
 dd(debug_backtrace(DEBUG_BACKTRACE_PROVIDE_OBJECT,5));
}

그리고 이 암호화 방식은 매번 암호화 결과가 달라서 sessionid 값이 매번 바뀌는 것처럼 보이지만 실제로는 바뀌지 않았습니다. 이 쿠키는 필요할 때 해독됩니다.

Laravel 프레임워크는 세션 하이재킹을 방지하기 위해 이러한 방식으로 설계될 수 있습니다! 고려 사항은 매우 포괄적입니다!

기타 보충 지식

기본 PHP 설정 세션 이름

session_name() 함수:

protected function encrypt(Response $response)
{
 foreach ($response->headers->getCookies() as $cookie) {
 if ($this->isDisabled($cookie->getName())) {
  continue;
 }
 
 $response->headers->setCookie($this->duplicate(
  $cookie, $this->encrypter->encrypt($cookie->getValue())
 ));
 }
 return $response;
}

session_name() 이 함수는 현재 세션 이름을 반환합니다. name 매개변수가 지정된 경우 session_name() 함수는 세션 이름을 업데이트하고 원래 세션 이름을 반환합니다.

요청이 시작되면 세션 이름이 재설정되어 session.name 구성 항목에 저장됩니다. 따라서 세션 이름을 설정하려면 각 요청에 대해 session_start() 또는 session_register() 를 호출하기 전에 session_name() 을 호출해야 합니다. 함수.코드> 함수.

session_name() 函数返回当前会话名称。 如果指定 name 参数, session_name() 函数会更新会话名称, 并返回 原来的 会话名称。

请求开始的时候,会话名称会被重置并且存储到 session.name 配置项。 因此,要想设置会话名称,那么对于每个请求,都需要在 调用 session_start() 或者 session_register() 函数 之前调用 session_name() COOKIE와 SESSION의 차이점과 관계

COOKIE는 클라이언트 측에 저장되고 SESSION은 서버 측에 저장됩니다.

  • 보안 측면에서는 SESSION이 더 안전합니다

  • 저장되는 콘텐츠의 종류 측면에서 볼 때 COOKIE는 문자열만 저장합니다(그리고 자동으로 문자열로 변환도 가능합니다)

  • 저장되는 콘텐츠의 크기 측면에서 볼 때 COOKIE가 저장하는 콘텐츠는 제한적이고 상대적으로 작습니다. SESSION은 기본적으로

  • 에는 이러한 제한이 없습니다. 성능 측면에서 SESSION을 사용하면 서버에 더 많은 부담을 줍니다

  • SEEION은 COOKIE에 따라 다르지만 COOKIE가 비활성화된 경우 SESSION을 통해 전달될 수도 있습니다. URL

위 내용은 Laravel의 Sessionid 처리 메커니즘에 대한 자세한 소개의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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