programing

브라우저가 닫힐 때 만료되는 PHP 세션 쿠키

megabox 2023. 10. 6. 21:00
반응형

브라우저가 닫힐 때 만료되는 PHP 세션 쿠키

저는 워드프레스에서 일하고 있으며, 제 기능에 다음과 같은 것들이 있습니다.php 페이지.

저는 3가지 스타일의 어레이를 가지고 있습니다.제 쿠키가 랜덤라이징을 하고 있습니다.

if (isset($_COOKIE['style'])){
    $style = $_COOKIE['style'];
}
else {
    $style = ($rand[$stylearray]);
    setcookie('style',$style,time(),COOKIEPATH,COOKIE_DOMAIN,false); 
}

브라우저가 닫힐 만 쿠키가 만료되도록 설정하고 싶습니다.그러나 페이지 새로 고침(F5)에서 쿠키가 만료되는 것 같습니다.

브라우저 닫기 시에만 쿠키가 만료되도록 설정할 수 있는 방법이 있습니까?

http://www.w3schools.com/php/func_http_setcookie.asp 은 다음과 같이 말합니다.

선택적.쿠키가 만료되는 시기를 지정합니다.값: time()+86400*30 은 쿠키가 30일 후에 만료되도록 설정합니다.이 매개변수를 생략하거나 0으로 설정하면, 쿠키는 세션이 끝날 때(브라우저가 닫힐 때) 만료됩니다.기본값은 0입니다.

그렇게

setcookie('style',$style, 0 , ...); 

아니면

setcookie('style',$style, '', ...); 

작동해야 합니다.

session.cookie를 사용해야 합니다. 문제는 php.ini를 수정해야 한다는 것입니다. 웹 호스트 구성에 따라 php.ini/php5.ini/.user.ini를 생성하고 다음을 입력해야 합니다.

 session.cookie_lifetime = 0 

0 =는 브라우저가 닫힐 때까지를 의미합니다.

브라우저가 닫혔는지 안 닫혔는지는 탐지할 수 없습니다.

가장 생각나는 옵션은 http 요청의 referer 값을 확인하는 것입니다.

참조자가 비어 있으면 사용자가 직접 웹 사이트를 열었습니다(브라우저 주소 필드 또는 저장된 즐겨찾기 링크 사용 등). 참조자가 자신의 도메인과 다른 경우 사용자는 구글과 같은 다른 사이트를 통해 왔습니다.

$recreate_cookie = false;
$my_domain = '://example.com';
$referer = $_SERVER['HTTP_REFERER'];
if ( ! $referer ) { 
  // Website opened directly/via favorites
  $recreate_cookie = true; 
}
if ( false === strpos( $referer, $my_domain ) ) { 
  // User arrived from a link of some other website
  $recreate_cookie = true; 
}

if ( $recreate_cookie ) {
  // Only name and value are required in your case.
  setcookie( 'style', $style );
}

그러나 이 방법은 http referer가 사용자에 의해 조작되거나 비활성화될 수 있기 때문에 100% 신뢰할 수 없습니다(예: 브라우저 추가 기능 또는 브라우저 인인코그니토 모드를 사용하는 동안).


브라우저가 닫혔는지 확인하기 어려운 것 외에도 PHP 세션을 사용하는 것을 제안합니다.

세션은 웹사이트 속도를 줄이지 않고 원하는 만큼의 데이터를 저장할 수 있다는 장점이 있습니다.웹 사이트를 열면 모든 쿠키가 서버로 전송됩니다.따라서 쿠키에 저장된 데이터가 많으면 로드되는 모든 페이지가 앞뒤로 많은 데이터를 전송합니다.반면, 세션은 ID 값만 서버로 전송합니다.서버는 해당 ID와 연결된 모든 데이터를 서버에 저장하여 많은 전송량을 절약합니다.

if ( ! session_id() ) { session_start(); }

// do the referer check here

if ( $recreate_cookie ) { 
  $_SESSION['style'] = $style; 
}  

15분 동안 스타일을 새로 고치지 않는 타이머를 추가하는 것이 타당할 수도 있습니다. 따라서 사용자가 브라우저를 닫고 15분 이내에 페이지를 다시 열면 이전과 같은 스타일이 됩니다.

// do the session start and referer check here

if ( $recreate_cookie ) {
  $expires = intval( $_SESSION['style_expire'] );
  if ( $expires > time() ) { $recreate_cookie = false; }
}

if ( $recreate_cookie ) { 
  $_SESSION['style'] = $style; 

  // Style will not change in the next 15 minutes
  $_SESSION['style_expire'] = time() + 15 * 60; 
}  

(이 모든 코드는 테스트되지 않았기 때문에 그대로 작동하지 않을 수도 있습니다만, 아마 아시리라 생각합니다.)

언급URL : https://stackoverflow.com/questions/30533051/php-session-cookies-to-expire-when-browser-closes

반응형