이 글은 주로 라라벨의 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!