Mam getter, aby uzyskać wartość z pliku cookie.
Teraz mam 2 ciasteczka według nazwy shares=
i nazwyobligations=
.
Chcę, aby ten getter tylko pobierał wartości z pliku cookie zobowiązań.
Jak mam to zrobic? Więc for
dzieli dane na osobne wartości i umieszcza je w tablicy.
function getCookie1() {
// What do I have to add here to look only in the "obligations=" cookie?
// Because now it searches all the cookies.
var elements = document.cookie.split('=');
var obligations= elements[1].split('%');
for (var i = 0; i < obligations.length - 1; i++) {
var tmp = obligations[i].split('$');
addProduct1(tmp[0], tmp[1], tmp[2], tmp[3]);
}
}
javascript
cookies
Neuron
źródło
źródło
Odpowiedzi:
Jednym z podejść, które pozwala uniknąć iteracji po tablicy, byłoby:
Przewodnik
Podział łańcucha na token spowoduje utworzenie tablicy z jednym łańcuchem (o tej samej wartości), na wypadek, gdyby token nie istnieje w łańcuchu, lub tablicy z dwoma łańcuchami, na wypadek gdyby token został znaleziony w łańcuchu.
Pierwszy (lewy) element to ciąg tego, co było przed tokenem, a drugi (prawy) to ciąg tego, co było po tokenie.
(UWAGA: w przypadku, gdy ciąg zaczyna się od tokena, pierwszym elementem jest pusty ciąg)
Biorąc pod uwagę, że pliki cookie są przechowywane w następujący sposób:
aby pobrać konkretną wartość pliku cookie, wystarczy pobrać ciąg znaków następujący po „; {name} =” i przed następnym „;”. Przed jakimkolwiek przetwarzaniem poprzedzamy ciąg plików cookie znakiem „;”, tak aby każda nazwa pliku cookie, w tym pierwsza, była ujęta z „;” i „=”:
Teraz możemy najpierw podzielić przez „; {name} =", a jeśli token zostanie znaleziony w ciągu ciasteczka (tj. Mamy dwa elementy), to skończymy z drugim elementem będącym ciągiem rozpoczynającym się od naszej wartości ciasteczka. Następnie wyciągamy to z tablicy (np. Pop) i powtarzamy ten sam proces, ale teraz za pomocą „;” jako token, ale tym razem wyciągając lewy ciąg (tj. shift), aby uzyskać rzeczywistą wartość tokena.
źródło
IE 10+
również daje błąd. Np ."user"
::"Joe"
,"user_name"
:"Doe"
Wolę używać pojedynczego dopasowania wyrażenia regularnego w pliku cookie:
LUB Możemy również użyć jako funkcji, sprawdź poniższy kod.
Poprawione dzięki Scott Jungwirth w komentarzach.
źródło
xyz=value
i doabcxyz=value
kiedyname = xyz
.unescape((document.cookie.match(key + '=([^;].+?)(;|$)') || [])[1] || '');
Zmodyfikowana wersja Glize / dom / Cookiesnew RegExp('(^| )' + name + '=([^;]+)')
uniknąć problemu podniesionego przez @BrentWashburne. Zrobiłem też test jsperf na tę odpowiedź i odpowiedź z najwyższą liczbą głosów, ta wychodzi nieco na górze, ale jest zdecydowanie mniej kodu i łatwiejsza do naśladowania: jsperf.com/simple-get-cookie-by-namenew RegExp('(^|;)' + name + '=([^;]+)')
?name
Za początek linii lub średnikiem, dlaczego przestrzeń ``?użyj skryptu pobierania pliku cookie:
nazwij to:
ukradłem powyższy kod ze strony plików cookie quirksmode. powinieneś to przeczytać .
źródło
Jeśli używasz jQuery, polecam użyć tej wtyczki:
https://github.com/carhartl/jquery-cookie
https://github.com/carhartl/jquery-cookie/blob/master/jquery.cookie.js
Abyś mógł odczytać taki plik cookie:
Możesz także napisać ciasteczko:
Usuń ciasteczko:
źródło
Metody w niektórych innych odpowiedziach, które wykorzystują wyrażenie regularne, nie obejmują wszystkich przypadków, w szczególności:
Następująca metoda obsługuje te przypadki:
Zwróci się,
null
jeśli plik cookie nie zostanie znaleziony. Zwróci pusty ciąg, jeśli wartość pliku cookie jest pusta.Uwagi:
document.cookie
- Gdy pojawia się po prawej stronie zadania, oznacza ciąg zawierający listę plików cookie oddzielonych średnikami, które z kolei sąname=value
parami. Wydaje się, że po każdym średniku jest spacja.String.prototype.match()
- Zwraca,null
gdy nie znaleziono dopasowania. Zwraca tablicę po znalezieniu dopasowania, a element w indeksie[1]
jest wartością pierwszej pasującej grupy.Uwagi na temat wyrażeń regularnych:
(?:xxxx)
- tworzy niepasującą grupę.^
- dopasowuje początek łańcucha.|
- oddziela alternatywne wzorce dla grupy.;\\s*
- pasuje do jednego średnika, po którym następuje zero lub więcej białych znaków.=
- pasuje do jednego znaku równości.(xxxx)
- tworzy pasującą grupę.[^;]*
- dopasowuje zero lub więcej znaków innych niż średnik. Oznacza to, że dopasuje znaki do średnika lub do końca łańcucha, ale nie w tym.źródło
function getCookie(name) { var match = document.cookie.match(RegExp('(?:^|;\\s*)' + name + '=([^;]*)')); return match ? match[1] : null; }
4 lata później wersja ES6 jest prostsza.
Stworzyłem również istotę, aby używać go jako
Cookie
obiektu. np.Cookie.set(name,value)
iCookie.get(name)
Spowoduje to odczytanie wszystkich plików cookie zamiast skanowania. Jest odpowiedni dla niewielkiej liczby plików cookie.
źródło
Zmodyfikowałem funkcję podaną tutaj przez Jonathana, używając wyrażenia regularnego można uzyskać wartość cookie o nazwie takiej jak ta:
Jeśli zwraca pusty ciąg znaków, oznacza to, że plik cookie istnieje, ale nie ma wartości, jeśli zwróci wartość false, wówczas plik cookie nie istnieje. Mam nadzieję, że to pomoże.
źródło
var
linii 3?matched = ...
Oto jeden linijka, aby uzyskać ciasteczko o określonej nazwie bez potrzeby jakiejkolwiek zewnętrznej biblioteki lib:
Ta odpowiedź oparta jest na genialnym rozwiązaniu Kirlich . Jedynym kompromisem tego rozwiązania jest to, że otrzymasz pusty ciąg, gdy plik cookie nie istnieje. W większości przypadków nie powinno to jednak łamać porozumienia.
źródło
Wiem, że to stare pytanie, ale natknąłem się również na ten problem. Dla przypomnienia, na stronie Mozilli jest trochę API .
Yoy może uzyskać dowolny plik cookie według nazwy, używając tylko JS. Kod jest również czystszy IMHO (z wyjątkiem długiej linii, którą z pewnością można łatwo naprawić).
Jak stwierdzono w komentarzach, należy pamiętać, że ta metoda zakłada, że klucz i wartość zostały zakodowane przy użyciu encodeURIComponent (). Usuń dekodowanie i kodowanieURIComponent (), jeśli klucz i wartość pliku cookie nie zostały zakodowane.
źródło
encodeURIComponent()
pliku cookie, co będzie prawdą, jeśli użyjesz funkcji pomocniczej do ustawienia pliku cookie, ale nie zawsze tak jest. testMożesz użyć biblioteki plików cookie js, aby uzyskać i ustawić pliki cookie JavaScript.
Dołącz do swojego HTML:
Aby utworzyć plik cookie:
Aby przeczytać plik cookie:
źródło
Oto dość krótka wersja
Zauważ, że wykorzystałem ciągi szablonów ES6 do skomponowania wyrażenia regularnego.
źródło
var
,+
do łączenia, itp. -.- ”var
?Posługiwać się
object.defineProperty
Dzięki temu możesz łatwo uzyskać dostęp do plików cookie
Od teraz możesz po prostu:
To również automatycznie się zaktualizuje, więc jeśli zmienisz plik cookie, również
Cookies
się zmieni.źródło
cookies[(cookie.split("=")[0]).replace(/ /g,'')] = ..
. Dzięki!!Kirlich dał dobre rozwiązanie. Jednak zawiedzie, gdy istnieją dwie wartości plików cookie o podobnych nazwach, oto prosta poprawka dla tej sytuacji:
źródło
zawsze działa dobrze:
Brak wymagań dla jQuery lub czegokolwiek. Czysty stary dobry JavaScript.
źródło
źródło
Prosta funkcja Pobierz plik cookie z nazwą pliku cookie:
źródło
Najwyraźniej MDN nigdy nie słyszał o klasie znaków wyrażenia regularnego na granicy słowa
\b
, która pasuje do znaków ciągłych,\w+
które są ograniczone po obu stronach\W+
:źródło
Wydaje mi się, że możesz podzielić pary klucz-wartość ciasteczka na tablicę i na tym oprzeć swoje wyszukiwanie:
Który działa następująco:
Fiddle: http://jsfiddle.net/qFmPc/
A może nawet następujące:
źródło
function getCookieData( name ) { var patrn = new RegExp( "(?:^| )" + name + "=(.*?)(?:;|$)" ); if ( match = (document.cookie.match(patrn) )) return match[1]; return false; }
W moich projektach korzystam z następującej funkcji, aby uzyskać dostęp do plików cookie według nazwy
źródło
Jeśli chcesz tylko sprawdzić, czy istnieją jakieś pliki cookie, wykonaj następujące czynności:
jeśli plik cookie zalogowany = prawda istnieje, otrzymasz 2, jeśli nie 1.
logged = true - zmień to na cookie name = wartość lub po prostu nazwę
źródło
.indexOf() >= 0
?Tutaj są już fajne odpowiedzi na pytanie, jak uzyskać plik cookie, ale oto moje własne rozwiązanie:
użycie: `
źródło
ustawione przez javascript
zdobądź jquery dzięki wtyczce jquery-cookie
źródło
odniesienie: https://developer.mozilla.org/en-US/docs/Web/API/Document/cookie
źródło
Moje rozwiązanie jest następujące:
Ta funkcja korzysta z funkcji Underscorejs _.find. Zwraca niezdefiniowany, jeśli nazwa pliku cookie nie istnieje
źródło
Zrobiłem to w ten sposób. dzięki czemu mogę uzyskać dostęp do obiektu w celu oddzielenia wartości. Dzięki temu możesz przekazać plik cookie rodzicowi, a następnie możesz uzyskać dostęp do swoich wartości za pomocą klawiszy takich jak
źródło
Funkcjonalne podejście do wyszukiwania istniejących plików cookie. Zwraca tablicę, więc obsługuje wiele wystąpień o tej samej nazwie. Nie obsługuje częściowego dopasowania klucza, ale banalne jest zastąpienie === w filtrze wyrażeniem regularnym.
źródło
Wystarczy użyć następującej funkcji (czysty kod javascript)
źródło
Pobierz plik cookie według nazwy, po prostu przekaż nazwę pliku cookie do funkcji poniżej
źródło
Poniższa funkcja zwróci
key-value
parę wymaganych plików cookie, gdziekey
jest nazwa pliku cookie ivalue
będzie to wartość pliku cookie.źródło
Przykład plików cookie: przykład JS:
Przechowuj tablice i obiekty za pomocą json lub xml
źródło