Javascript cookie

kongen

kongemedlem
I php så setter man en cookie slik

PHP:
setcookie('cookie_name', $value, time() + 3600), '/', '.domain.com', true, true);

i javascript slik

PHP:
document.cookie="value; expires=Thu, 24 Dec 2015 12:00:00 UTC; path=/";

Men hvordan setter man de 3 siste tingene i javascript cookien (domene, ssl, httponly)?
 

Camillafr

Medlem
Kode:
document.cookie="value; expires=Thu, 24 Dec 2015 12:00:00 UTC;domain=.example.com;path=/;secure"

Domene settes sånn: ;domain=.example.com;
Ssl/secure settes sånn: ;secure

HttpOnly får ikke du satt via javascript.
Utklipp fra Wikipedia:
The HttpOnly cookie is supported by most modern browsers. On a supported browser, an HttpOnly session cookie will be used only when transmitting HTTP (or HTTPS) requests, thus restricting access from other, non-HTTP APIs (such as JavaScript).

Har ikke testet koden over, men tror det skal fungere sånn.
 

adeneo

Medlem
For å begynne med den siste først, du kan ikke sette httponly ettersom det betyr at cookien ikke er tilgjengelig fra javascript, og derfor kan du selvfølgelig heller ikke lage slike cookies i javascript.

Forøvrig er det likt, her er javascript
PHP:
document.cookie = "name=value; expires=date; path=path; domain=domain; secure";

og PHP
PHP:
setcookie ( $name, $value, $expire, $path, $domain, $secure, $httponly )

og de er nesten helt like, sett bort i fra at javascript ikke har httponly. Med andre ord blir denne i PHP
PHP:
setcookie('cookie_name', $value, time() + 3600), '/', '.domain.com', true, true);

omtrent dette i javascript
PHP:
var time = new Date();
var value = "ting å lagre i cookie";
time.setTime( time.getTime() + (3600 * 1000) ); // millisekunder

document.cookie = "cookie_name=" + escape(value) +
                "; expires=" + time.toGMTString() +
                "; path=/; domain=domain.com; secure";

Det første man legger merke til er at det er litt komplisert med cookies i javascript, og derfor finnes det en del greie funksjoner man kan bruke som gjør ting litt mye lettere, for eksempel
PHP:
function setCookie(name, value, expires, path, domain, secure) {
    var curCookie = name + "=" + escape(value) +
                    ((expires) ? "; expires=" + expires.toGMTString() : "") +
                    ((path)    ? "; path=" + path : "") +
                    ((domain)  ? "; domain=" + domain : "") +
                    ((secure)  ? "; secure" : "");
    document.cookie = curCookie;
}

function getCookie(name) {
    var dc     = document.cookie;
    var prefix = name + "=";
    var begin  = dc.indexOf("; " + prefix);
    if (begin == -1) {
        begin = dc.indexOf(prefix);
        if (begin != 0) return null;
    } else {
        begin += 2;
    }
    var end = document.cookie.indexOf(";", begin);
    if (end == -1) end = dc.length;
    return unescape(dc.substring(begin + prefix.length, end));
}

Legg også merke til at document.cookie er litt spesiell, det er en property av document, men i motsetning til alle andre properties så overskrives ikke verdien, men i stedet legges den til, altså oppretter du en ny cookie hver gang du bruker et nytt navn på cookien, selv om det ser ut som om man skriver over document.cookie hver gang.

Dersom du ikke trenger å ha tilgang til dataene du skal lagre både fra javascript og PHP finnes det enklere alternativ, i PHP har du allerede superglobals, og i javascript er det local storage.
 

kongen

kongemedlem
Takk :)

Denne fungerer frem og tilbake mellom php og javascript. Fant også ut at man må sette php cookie før <head>, det trengs ikke i javascript.

Har lagt merke til at ved javascript så brukes det funksjoner nesten hele tiden, mye mer enn php.
 
Topp