Nice programing

언제 쿠키 대신 세션 변수를 사용해야합니까?

nicepro 2021. 1. 7. 21:21
반응형

언제 쿠키 대신 세션 변수를 사용해야합니까?


세션 변수와 쿠키는 저와 매우 비슷해 보입니다. 기술적 차이를 이해합니다.하지만 둘 중 하나를 사용할시기를 어떻게 결정합니까?


  • 세션은 서버에 저장되므로 클라이언트는 사용자가 저장 한 정보에 액세스 할 수 없습니다. 서버에 저장되는 세션 데이터는 각 페이지와 함께 전체적으로 전송 될 필요가 없습니다. 클라이언트는 ID를 전송하기 만하면 데이터가 서버에서로드됩니다.

  • 반면에 쿠키는 클라이언트에 저장됩니다. 오랫동안 내구성을 유지할 수 있으며 웹 서버 클러스터가있을 때보다 원활하게 작업 할 수 있습니다. 그러나 세션과 달리 쿠키에 저장된 데이터는 각 페이지 요청과 함께 전체 전송됩니다.

  • 쿠키에 데이터 저장 방지

    • 최종 사용자가보고, 읽고, 조작하거나 악의적 인 의도를 가진 사람들이 가로 챌 수 있습니다. "session_id"를 제외하고 쿠키의 데이터를 신뢰할 수 없습니다.
    • 사용자 당 페이지 요청 당 1k의 데이터를 추가하면 대역폭이 증가하여 대역폭이 10-15 % 증가 할 수 있습니다. 이것은 아마도 $$ 관점에서 비용이 많이 들지는 않지만 성능 관점에서 볼 수 있습니다. 서버 당 대역폭을 효과적으로 10-15 % 줄입니다. 즉, 더 많은 서버가 필요할 수 있습니다.
  • 세션 데이터에 저장할 수있는 내용은 데이터 양과 보유한 사용자 수에 따라 다릅니다. no_of_users* size_of_session_data는 서버에서 사용 가능한 여유 메모리보다 작아야합니다.


  • 항상 세션 사용
  • 더 긴 로그인 세션이 필요한 경우에만 쿠키를 사용하십시오. 그런 다음 암호화 된 사용자 ID로 쿠키를 추가하십시오.

대부분의 경우 세션 상태는 쿠키를 사용하여 유지됩니다. 따라서 그것은 실제로 둘 중 하나의 문제가 아니라 함께 사용하는 방법입니다.

프레임 워크의 세션 인프라를 사용하면 작업이 더 쉬워 질 수 있지만 쿠키를 사용하여 수동으로 상태를 추적하면 일반적으로보다 세밀한 제어가 가능합니다. 올바른 솔루션은 수행하려는 작업에 따라 다릅니다.


쿠키는 단일 세션보다 오래 지속될 수 있습니다. 그러나 사용자가 쿠키를 삭제하거나 브라우저가 쿠키를 허용하지 않는 사용자가있을 수 있습니다 (이 경우 서버 측 세션 만 작동합니다).


쿠키는 클라이언트 측이고 세션은 서버 측입니다.

사용자를 신뢰할 수있는 작은 데이터 (예 : 글꼴 설정, 사이트 테마 등) 및 서버 측 데이터 (예 : 세션 ID)의 불투명 한 ID에는 쿠키를 사용하십시오. 이러한 데이터는 언제든지 손실 될 수 있으며 신뢰할 수 없습니다 (예 : 삭제해야 함).

더 큰 데이터 청크 (많은 시스템에서 개체, 데이터 구조 등을 저장할 수 있음)와 신뢰할 수 있어야하는 데이터 청크 (예 : 인증 상태 등)에 세션 데이터를 사용합니다. 일반적으로 더 큰 상태 데이터를 저장하려면 세션 데이터를 사용합니다.

GUI, 캐싱 등에 필요한 경우 인증 상태와 같은 정보도 쿠키에 저장할 수 있습니다.하지만 절대 신뢰하지 말고 존재하는 것에 의존하지 마십시오. 쿠키는 삭제하기 쉽고 위조하기 쉽습니다. 세션 데이터는 애플리케이션이 제어하기 때문에 위조하기가 훨씬 더 어렵습니다.


PHP 세션의 단점 중 하나는 세션 처리가 작동하는 방식입니다. 특히, 한 번에 하나의 프로세스 / 요청 만 쓰기 위해 세션을 열 수 있습니다.

session_start() 

세션 파일이 잠겨 있습니다. 더 많은 프로세스가 발생하면 나머지 프로세스가 쌓여 차례를 기다립니다.

즉, 페이지에서 AJAX를 사용하여 여러 요소를 업데이트하는 경우-AJAX 요청이 동일한 세션을 열기를 원하지 않는 경우-요청이 대기열에 강제로 들어가고 해당 요청 중 하나가 중단되면 해제되지 않습니다. 세션-새 탭이나 창을 열면 서버의 대기열에 채울 수없는 다른 요청 만 넣는 브라우저가 중단됩니다. 사용

session_write_close()

가능한 한 빨리 세션을 해제하는 것은 부분적인 해결 방법입니다.

사용자가 지루해지고 더 많은 창을 여는 장기 실행 요청은 동일한 브라우저 중단 효과를 가질 수 있습니다.

PHP 세션을 피하는 것이 좋습니다.


쿠키는 요청이있을 때마다 서버로 전송되므로 상당한 양의 데이터를 저장할 계획이라면 세션에 저장하십시오.

그렇지 않으면 소량의 데이터를 저장하는 경우 쿠키가 괜찮습니다.

쿠키는 100 % 안전하지 않으므로 민감한 데이터는 세션에 저장해야합니다. 쿠키의 장점은 일반적으로 세션 데이터를 저장하는 서버의 메모리를 절약 할 수 있다는 것입니다.


세션은 서버에 저장됩니다. 쿠키에 무언가를 저장하면 사용자의 브라우저는 모든 요청과 함께 해당 정보를 전송하여 잠재적으로 사용자의 관점에서 사이트 속도를 저하시킵니다. 가능한 한 쿠키 사용을 피하려고합니다.


데이터가 쿠키에 비해 너무 크거나 데이터가 너무 커서 쿠키를 사용한 경우 성능이 저하되는 경우에만 세션을 사용하십시오.

예를 들어, 두 개의 로그인 토큰 또는 이와 유사한 것과 같이 쿠키의 세션 ID 크기보다 작은 데이터를 저장하는 경우 쿠키를 통해 세션을 사용하는 이유를 알 수 없습니다.

또한 PHP 세션 파일은 클라이언트 측에만 저장되는 쿠키와 비교하여 기본적으로 디스크에 저장됩니다.


세션은 서버 측에 저장됩니다. 방문자가 쿠키에 무언가를 저장하면 브라우저는 모든 요청에 ​​대해 사용자 정보를 보냅니다.

이것은 많은 서버 컴퓨터 시간을 소비하고 사용자의 경험을 느리게하는 경향이 있습니다. 일부 브라우저는 쿠키보다 세션에 더 많은 이점을 제공하는 쿠키를 지원하지 않습니다. 세션을 강력히 권장합니다.

이것이 도움이 될 수 있습니다 : 쿠키 (php.net)


확실한 가이드

N.B - A cookie is stored on users' browsers, and a session is stored on your hosting server machine.

When to Use

  1. Use a cookie when you want your application to remember user's data always, even when they have closed their browsers. E.g whenever you type www.facebook.com it takes you to your account, even when your browser has been closed and re-opened.

    Because any data kept in a session is cleared off once you close your browser.

  2. Use a cookie when the user information to be stored is much larger than normal. ... With a session, if you have a larger user base, like Facebook, think of how it will look storing all user sessions on the hosting machine.

  3. Use a session when the user information to be stored is not larger than normal, and you don't want the public to have access to your user variables...


Sessions and cookies are not the same at all. Cookies are client side. Sessions are server side. Sessions often (but not necessarily) use cookies to correlate one request with another from the same user to identify that they belong to the same session.

A session is an artificial concept, and HTTP doesn't have that notion. It is created by web servers to help web developers carry information across requests, like user account information, shopping carts, form data, etc. A cookie is carried by standard HTTP headers.

The information you store in a session vs. a cookie is up to you. Typically you put stuff in cookies that you want to persist across sessions after the user closes his/her browser. Maybe remembering authentication tokens to implement "remember me" functionality, or past user activity to personalise his/her experience. Keep this information small and "referential", i.e. it could be just IDs that refer to richer information you store sever side. Remember that what is client side is more vulnerable to malware, so don't store passwords or sensitive information.

Finally, there is also local storage, which you did not mention. This is also client side, but arguably a bit less susceptible to cross-site scripting hacks since, unlike cookies data, it is not automatically sent in the headers.

ReferenceURL : https://stackoverflow.com/questions/2240556/when-should-i-use-session-variables-instead-of-cookies

반응형