Bir etki alanında bir JavaScript çerezi oluşturma ve bunu alt etki alanlarında okuma


101

Aşağıda, kullanıcının bilgisayarına 12 ay boyunca yazılan bir JavaScript tanımlama bilgisi bulunmaktadır.

Çerezi ana etki alanımıza yerleştirdikten sonra example.com, örneğin kullanıcı bir alt etki alanını ziyaret test.example.comederse, kullanıcının "test" alt etki alanımızdaki etkinliğini belirlemeye devam etmemiz gerekir.

Ancak mevcut kodla, ayrılır www.example.comve ziyaret eder test.example.cometmez artık "Merhaba Dünya" olarak işaretlenmezler.

Çerezin alt alan adlarında okunmasına izin vermek için herhangi biri koduma yardımcı olabilir mi?

<script type="text/javascript">
  var cookieName = 'HelloWorld';
  var cookieValue = 'HelloWorld';
  var myDate = new Date();
  myDate.setMonth(myDate.getMonth() + 12);
  document.cookie = cookieName +"=" + cookieValue + ";expires=" + myDate;
</script>

Yanıtlar:


209

Çerezinizdeki domainve pathözelliklerini şu şekilde ayarlayın :

<script type="text/javascript">
var cookieName = 'HelloWorld';
var cookieValue = 'HelloWorld';
var myDate = new Date();
myDate.setMonth(myDate.getMonth() + 12);
document.cookie = cookieName +"=" + cookieValue + ";expires=" + myDate 
                  + ";domain=.example.com;path=/";
</script>

2
Bunu localhost'ta yapmaya çalışıyorum ve yolu değiştiremiyorum
Enve

7
@Enve - Tarayıcılar localhost tanımlama bilgilerini diğer tanımlama bilgilerinden biraz farklı kullanır. Daha doğrusu, tüm tanımlama bilgilerini localhost ile çalışmayı zorlaştıracak şekilde ele alırlar . Örneğin, stackoverflow.com/questions/1134290/… sayfasına bakın . Ben senin düzenleme öneririz hostsdosya ve böyle bir şey aliasing myserver.localiçin 127.0.0.1. Daha sonra bunu yerel sunucunuza erişmek için (ve çerezleri ayarlarken) kullanabilirsiniz ve umarız her şey çalışmalıdır.
2013 00:32

3
Oluşturduğunuz ve aldığınız tüm çerez değerleri dize değerleri olmalıdır. Dizeler, onları almaya çalışırken yerel depolamayı altüst edebilecek karakterler içerebilir. Önerdiğim bir şey , yapılması gereken herhangi bir dönüşümü işlemek için çerez adı ve değeri için global encodeURI()& decodeURI()yöntemleri kullanmaktır . yani document.cookie = encodeURI(cookieName) +"=" + encodeURI(cookieValue).
Dzeimsas Zvirblis

2
Sunucu tarafı kodunuz C # ile yazıldıysa, Rick Strahl weblog.west-wind.com/posts/2012/Apr/24/…
CAK2

Maalesef javascript kullanmak sub.example.comiçin çerez ayarlayamıyorum.example.com
Marinos

28

İstediğiniz:

document.cookie = cookieName +"=" + cookieValue + ";domain=.example.com;path=/;expires=" + myDate;

Gereğince RFC 2109 , tüm alt etki alanları için kullanılabilir bir çerez sahip olmak, bir koymalıdır. adınızın önünde.

Yolun = / ayarlanması, tanımlama bilgisinin belirtilen tüm etki alanında (aka .example.com) kullanılabilir olmasını sağlar.


FWIW - "path = expires =" parçasını kaldırmanız ve "expires =" olarak ayarlamanız gerektiğini düşünüyorum.
malonso

3
Yeni RFC 6265'e göre, artık .etki alanının önüne eklemeye gerek yoktur .
Dan

7

İşte çalışan bir örnek:

document.cookie = "testCookie=cookieval; domain=." + 
location.hostname.split('.').reverse()[1] + "." + 
location.hostname.split('.').reverse()[0] + "; path=/"

Bu, kök etki alanını konum nesnesinden alan ve tanımlama bilgisini ayarlayan genel bir çözümdür. Tersine çevirme, varsa kaç tane alt alanınız olduğunu bilmemenizdir.


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.