it-swarm-ko.tech

Drupal 캐싱으로 인해 쿠키 읽기 방지

내 프로덕션 사이트 중 하나에서 jQuery 스타일 시트 스위처를 작성했습니다. 선택이 이루어지면 쿠키를 삭제하고 php를 사용하여 스타일을 재정의하는 페이지로드에서 해당 스타일 시트를 선택합니다. 성능 캐싱 모드를 활성화 할 때까지 모든 것이 훌륭합니다. 그러면 각 페이지로드에서 쿠키가 무시됩니다. 분명히 이것은 원하는 효과가 아니며 이것이 발생하는 이유를 알 수 있습니다. 페이지가 캐시되고 '동적으로'변화하는 스타일 시트로 보이는 것을로드하는 것과 관련하여 더 이상 동적이 아니기 때문입니다. 스타일 시트를 변경할 수 있지만 페이지로 돌아 가면 초기 스타일이 적용됩니다. 참고로 각 페이지 템플릿 (page-front.tpl.php 및 page.tpl.php)에 PHP를 코딩했으며 javascript는 내 scripts.js에 있습니다. PHP는 기본적으로 두 개의 if else 문입니다.

많은 양의 트래픽으로 인해 사이트에서 캐싱을 활성화해야하지만 이상적으로는이 스타일 전환기 기능을 유지하고 싶습니다. 이에 대한 캐싱 규칙에 예외를 만드는 방법이 있습니까? 아니면 스위처를 비활성화해야합니까? 모듈에 패킹하면 도움이 될까요?

미리 감사드립니다 :)

2
Storsey

동일한 페이지의 두 가지 버전을 만들고 싶기 때문에 캐싱으로이 작업을 수행하는 데 어려움이 있다고 생각합니다.

나는 이것을 시도하지 않았지만 style.css가 실제 CSS 파일이 아니라 쿠키를 기반으로 스타일을 반환하는 drupal 콜백이되도록 할 수 있습니다. IE의 스타일과 마찬가지로 "스타일 시트"를 포함해야합니다. 이것을 캐시 할 수는 없지만 성능이 정말로 필요한 경우 php 파일에서 수행하고 drupal 부트 스트랩을 건너 뛸 수 있습니다.

대체 옵션은 js 자체가 쿠키를 기반으로 스타일을 실행하도록하는 것입니다.

이러한 옵션 중 어느 것도 이상적이지는 않지만 작동해야합니다.

2
googletorp

쿠키를 사용하여 memcache를 사용하여 cache_page 변형 선택 : http://drupal.org/node/942914 . GeoIP 타겟팅에 사용합니다.

사용자가 모바일 장치를 사용하는 경우 쿠키를 사용하여 모바일 테마 선택 : http://drupal.org/node/361832#comment-4110568 . 이것을 사용하지 말고, 지역 SeaDUG 회의 중 하나에서 도움을주었습니다.

2
mikeytown2

페이지의 한 버전 만 만들 수 있습니까? 모든 페이지에 모든 스타일을 포함하고 (아마도 이상적이지는 않지만 크기가 크지 않으면 세상의 끝은 아닙니다) JavaScript를 사용하여 쿠키 값에 따라 본문 클래스를 추가 하시겠습니까?

또는 스타일 시트가 .css 파일이 아닌 콜백이라는 googletorp의 아이디어를 좋아합니다.

2
Chris Cohen