it-swarm.com.de

Lesen Sie ein Javascript-Cookie nach Namen

Ich habe einen Cookie gesetzt

document.cookie = 
    'MYBIGCOOKIE=' + value + 
    '; expires=' + now.toGMTString() + 
    '; path=/';

Jetzt gibt es zwischen 5 und 10 Cookies auf dieser Site. Gibt es eine Möglichkeit, den Wert dieses Cookies anhand des Namens zu überprüfen.

if (document.cookie.MYBIGCOOKIE == '1') {
    alert('it is 1')
}
26
Jimbo

Verwenden Sie den RegExp-Konstruktor und mehrere Ersetzungen, um die Syntax zu erläutern:

function getCook(cookiename) 
  {
  // Get name followed by anything except a semicolon
  var cookiestring=RegExp(""+cookiename+"[^;]+").exec(document.cookie);
  // Return everything after the equal sign, or an empty string if the cookie name not found
  return decodeURIComponent(!!cookiestring ? cookiestring.toString().replace(/^[^=]+./,"") : "");
  }

//Sample usage
var cookieValue = getCook('MYBIGCOOKIE');
19
Paul Sweatte

Leider ist die Cookie-Syntax von Javascript bei weitem nicht so schön. Meiner Meinung nach ist es eines der am schlechtesten entworfenen Teile.

Wenn Sie versuchen, document.cookie zu lesen, erhalten Sie eine Zeichenfolge, die alle gesetzten Cookies enthält. Sie müssen die Zeichenfolge analysieren, indem Sie das Semikolon ; trennen. Anstatt dies selbst zu schreiben, gibt es eine Vielzahl von Versionen im Web. Mein Favorit ist der bei quirksmode.org . Dadurch erhalten Sie createCookie-, readCookie- und deleteCookie-Funktionen.

14
lonesomeday
function getCookie(c_name)
{
    var i,x,y,ARRcookies=document.cookie.split(";");

    for (i=0;i<ARRcookies.length;i++)
    {
        x=ARRcookies[i].substr(0,ARRcookies[i].indexOf("="));
        y=ARRcookies[i].substr(ARRcookies[i].indexOf("=")+1);
        x=x.replace(/^\s+|\s+$/g,"");
        if (x==c_name)
        {
            return unescape(y);
        }
     }
}

Quelle: W3Schools

Edit: Wie @ zcrar70 festgestellt hat, lautet der obige Code falsch, siehe folgende Antwort Javascript getCookie-Funktionen

11
usoban

mit jquery-cookie

Ich finde diese Bibliothek hilfreich. 3.128 kb reine Bequemlichkeit.

skript hinzufügen

<script src="/path/to/jquery.cookie.js"></script>

cookie setzen

$.cookie('name', 'value');

keks lesen

$.cookie('name');
3
rahulroy9202

Der Zweck des Stack Overflows besteht darin, eine Datenbank mit Antworten von guter Qualität bereitzustellen. Ich werde daher auf Standard-Quellcode und einen Artikel verweisen, der Beispiele enthält:

http://www.codelib.net/javascript/cookies.html

Hinweis: Der Code ist frei von regulären Ausdrücken, was die Effizienz erheblich verbessert.

Mit dem bereitgestellten Quellcode würden Sie Cookies wie folgt verwenden:

makeCookie('color', 'silver');

Dadurch wird ein Cookie gespeichert, der darauf hinweist, dass die Farbe silber ist. Das Cookie läuft nach der aktuellen Sitzung ab (sobald der Benutzer den Browser beendet).

makeCookie('color', 'green', { domain: 'gardens.home.com' });

Dies speichert die Farbe Grün für gardens.home.com.

makeCookie('color', 'white', { domain: '.home.com', path: '/invoices' });
makeCookie('invoiceno', '0259876', { path: '/invoices', secure: true });

speichert die Farbe Weiß für Rechnungen, die auf home.com überall angezeigt werden. Der zweite Cookie ist ein sicherer Cookie und zeichnet eine Rechnungsnummer auf. Dieses Cookie wird nur an Seiten gesendet, die über sichere HTTPS-Verbindungen angezeigt werden. Skripts auf sicheren Seiten sind die einzigen Skripts, die zum Zugriff auf das Cookie berechtigt sind.

Ein HTTP-Host darf keine Cookies für einen anderen HTTP-Host speichern oder lesen. Daher muss eine Cookie-Domain mit mindestens zwei Perioden gespeichert werden. Standardmäßig entspricht die Domäne der Domäne der Webadresse, von der das Cookie erstellt wurde.

Der Pfad eines HTTP-Cookies beschränkt sich auf bestimmte Dateien auf dem HTTP-Host. Einige Browser verwenden den Standardpfad /, sodass der Cookie auf dem gesamten Host verfügbar ist. Andere Browser verwenden den gesamten Dateinamen. Wenn in diesem Fall /invoices/overdue.cgi ein Cookie erstellt, erhält nur /invoices/overdue.cgi das Cookie zurück.

Beim Festlegen von Pfaden und anderen Parametern basieren sie normalerweise auf Daten, die von Variablen wie location.href usw. abgerufen werden. Diese Zeichenfolgen sind bereits mit Escapezeichen versehen. Wenn der Cookie erstellt wird, werden die Werte durch die Cookie-Funktion nicht erneut gesperrt. Nur der Name und der Wert des Cookies werden geschützt, sodass wir beliebige Namen oder Werte verwenden können. Einige Browser begrenzen die Gesamtgröße eines Cookies oder die Gesamtzahl von Cookies, die eine Domain behalten darf.

makeCookie('rememberemail', 'yes', { expires: 7 });
makeCookie('rememberlogin', 'yes', { expires: 1 });
makeCookie('allowentergrades', 'yes', { expires: 1/24 });

diese Cookies speichern die E-Mail-Adresse des Benutzers für 7 Tage, das Login des Benutzers für 1 Tag und gestatten dem Benutzer, Noten für 1 Stunde ohne Passwort einzugeben (ein vierundzwanzigster Tag). Diese Fristen werden auch dann eingehalten, wenn sie den Browser verlassen, oder wenn sie den Browser nicht beenden. Benutzer können ein anderes Browserprogramm verwenden oder Cookies löschen. In diesem Fall haben die Cookies unabhängig vom Ablaufdatum keine Auswirkungen.

makeCookie('rememberlogin', 'yes', { expires: -1 });

löscht den Cookie. Der Cookie-Wert ist überflüssig und der Rückgabewert false bedeutet, dass das Löschen erfolgreich war. (Ein Ablauf von -1 wird anstelle von 0 verwendet. Wenn wir 0 verwendet hätten, könnte der Cookie bis zu einer Sekunde nach dem aktuellen Zeitpunkt gelöscht werden. In diesem Fall würden wir denken, dass das Löschen nicht erfolgreich war.)

Da ein Cookie auf diese Weise gelöscht werden kann, überschreibt ein neuer Cookie natürlich auch den Wert eines alten Cookies mit demselben Namen, einschließlich des Ablaufdatums usw. Es werden jedoch Cookies für vollständig nicht überlappende Pfade oder Domänen gespeichert getrennt, und die gleichen Namen stören sich nicht. Im Allgemeinen kann jedoch jeder Pfad oder jede Domäne, die Zugriff auf einen Cookie hat, den Cookie überschreiben, unabhängig davon, ob er den Pfad oder die Domäne des neuen Cookies ändert oder nicht.

rmCookie('rememberlogin');

löscht auch den Cookie, indem er makeCookie('rememberlogin', '', { expires: -1 }) durchführt. Dies macht den Cookie-Code länger, spart jedoch Code für Benutzer, die ihn verwenden, was auf längere Sicht mehr Code spart.

2
Joseph Myers
document.cookie="MYBIGCOOKIE=1";

Ihre Cookies würden folgendermaßen aussehen:

"MYBIGCOOKIE=1; PHPSESSID=d76f00dvgrtea8f917f50db8c31cce9"

lesen Sie zuerst alle Cookies:

var read_cookies = document.cookie;

dann teilen Sie alle Cookies mit ";" :

var split_read_cookie = read_cookies.split(";");

verwenden Sie dann for-Schleife, um jeden Wert zu lesen. In Loop wird jeder Wert erneut mit "=" aufgeteilt:

for (i=0;i<split_read_cookie.length;i++){
    var value=split_read_cookie[i];
    value=value.split("=");
    if(value[0]=="MYBIGCOOKIE" && value[1]=="1"){
        alert('it is 1');
    }
}
2
japetko

Einer der kürzesten Wege ist dies, aber wie bereits erwähnt, kann er den falschen Cookie zurückgeben, wenn es ähnliche Namen gibt (MyCookie vs AnotherMyCookie):

var regex = /MyCookie=(.[^;]*)/ig;
var match = regex.exec(document.cookie);
var value = match[1];

Ich benutze dies in einer Chrome-Erweiterung, damit ich den Namen kenne, den ich einsetze, und ich kann sicherstellen, dass es kein Duplikat mehr oder weniger gibt.

2
Escape75

Hier ist eine API, die geschrieben wurde, um den unangenehmen Browser-Cookie "API" zu glätten 

http://code.google.com/p/cookies/

1
JAAulde

Sie können folgende Funktion verwenden:

function getCookiesMap(cookiesString) {
  return cookiesString.split(";")
    .map(function(cookieString) {
        return cookieString.trim().split("=");
    })
    .reduce(function(acc, curr) {
        acc[curr[0]] = curr[1];
        return acc;
    }, {});
}

Wenn mit dem Parameter document.cookie als Parameter aufgerufen, wird ein Objekt zurückgegeben, wobei die Cookie-Schlüssel als Schlüssel und die Cookies-Werte verwendet werden.

var cookies = getCookiesMap(document.cookie);
var cookieValue = cookies["MYBIGCOOKIE"];
1
Dimos

Die einfachste Möglichkeit, einen Cookie zu lesen, ist die Verwendung von Regexp wie folgt:

** Ersetzen Sie COOKIE_NAME Durch den Namen Ihres Cookies.

document.cookie.match(/COOKIE_NAME=([^;]*);/)[1]

Wie funktioniert es?

Cookies werden in document.cookie Wie folgt gespeichert: cookieName=cookieValue;cookieName2=cookieValue2;.....

Die Regex durchsucht die gesamte Cookie-Zeichenfolge nach Literalen "COOKIE_NAME=" Und erfasst danach alles, was kein Semikolon ist, bis tatsächlich ein Semikolon gefunden wird.

Dann verwenden wir [1], Um das zweite Element aus dem Array abzurufen, bei dem es sich um die erfasste Gruppe handelt.

0
Maycow Moura

Hier ist eine Beispielimplementierung, die diesen Prozess nahtlos machen würde.

var CookieReader = (function(){
var lastCookies = {};
var lastCookieString = '';

function safeGetCookie() {
    try {
        return document.cookie || '';
    } catch (e) {
        return '';
    }
}

function safeDecodeURIComponent(str) {
    try {
        return decodeURIComponent(str);
    } catch (e) {
        return str;
    }
}

function isUndefined(value) {
    return typeof value === 'undefined';
}

return function () {
    var cookieArray, cookie, i, index, name;
    var currentCookieString = safeGetCookie();

    if (currentCookieString !== lastCookieString) {
        lastCookieString = currentCookieString;
        cookieArray = lastCookieString.split('; ');
        lastCookies = {};

        for (i = 0; i < cookieArray.length; i++) {
            cookie = cookieArray[i];
            index = cookie.indexOf('=');
            if (index > 0) { //ignore nameless cookies
                name = safeDecodeURIComponent(cookie.substring(0, index));

                if (isUndefined(lastCookies[name])) {
                    lastCookies[name] = safeDecodeURIComponent(cookie.substring(index + 1));
                }
            }
        }
    }
    return lastCookies;
};
})();
0
craftsmannadeem