WordPress si cookies

Nu de mult am avut de facut o integrare intre un site WordPress si o aplicatie gazduita pe alt server. Aceeasi useri trebuie sa functioneaze pe site-ul WordPress, fara a crea un utilizator in WordPress.

Printr-un remote API call am facut autentificarea. Fara a intra in prea multe detalii (poate intr-un post urmator) trebuie sa folosim cookies pentru a retine cine-i cine.

Se pare ca WordPress are o mica subtilitate cand vine vorba de cookies. Chiar si o mica diferenta intre domeniu si ceea ce este in WordPress va ignora complet instructiunile tale de a seta un cookie.

Dar mai intai, ce sunt cookies: cookies sunt fisiere mici (text) care stocheaza informatie pe computerul unui vizitator pe un oarecare site. Se folosesc pentru a putea identifica un calculator / utilizator. Cookies se folosesc de exemplu pentru a stoca date despre cel care a postat un comentariu pe un site, a tine minte preferinte, setari si asa mai departe.

Nota: WordPress are propriile functii pentru a seta si sterge cookies legate de autentificare (  wp_set_auth_cookie(), wp_clear_auth_cookie()  ).

Eu am folosit functia din PHP pentru a seta cookie ( setcookie() ).

Nota: cookie se trimite deodata cu HTTP headers sau primim mesajul “Warning: Cannot modify header information – headers already sent by…”.  Ca sa eviti mesajul asta trebuie sa initializezi cookie-ul atasat de [actions] init sau wp. (mai multe informatii despre actions / actiuni WordPress aici.

Codul de mai jos este pus de mine intr-un plugin pe care l-am creat si este atasat de actiunea init.

setcookie('training-module-user', 'cookie-data', time() + 3600 * 24 * 30, COOKIEPATH, COOKIE_DOMAIN); //30 days

Functia setcookie accepta mai multi parametri. In exemplul de mai sus cookie-ul are numele ‘training-module-user’, informatiile pe care vrem sa le salvam, cand expira (in cazul asta 30 de zile) si constantele de la WordPress, COOKIEPATH si COOKIE_DOMAIN. Atentie, acestea doua sunt foarte importante. Fara ele, nu vei avea nici un cookie.

Dupa ce am executat autentificarea, se poate vedea cookie-ul in firebug, la tabul cookies.

Cookie Exemplu Firebug

Cum citesti valoarea unui cookie

Citirea valorilor stocate in cookie se face destul de simplu, folosim variabila $_COOKIE. Este o variabila de tip array asociativ. Pentru a folosi datele in cazul nostru, folosim  $_COOKIE[‘training-module-user]

Variabila $_COOKIE iti va returna toate cookie-urile de pe domeniul respectiv. Pentru a sterge un cookie in WordPress, trebuie sa stergem valoarea stocata in cookie si / sau schimbam valabilitatea la o data din trecut. Astfel browserul va sterge automat cookie-ul expirat.

setcookie( ‘training-module-user’, , time() 3600, COOKIEPATH, COOKIE_DOMAIN );

Aceeasi tehnica e valabila pe orice tip de site, nu doar WordPress.

Ce facem aici – setam cookie-ul la o ora in trecut. time() ne returneaza unix timestamp iar -3600 scade o ora. Deci cookie e expirat de o ora, ceea ce va face browserul sa-l stearga.

Daca vrei sa testezi, poti din firebug sau din browser sa stergi toate cookies.

Published by

Cristian Raț

Lucrez ca si dezvoltator aplicatii web de mai bine de 10 ani. Sunt Senior PHP developer la o companie din Londra. Anterior am lucrat in diverse agentii digitale din Londra sau Romania, unde am avut propria companie. In general folosesc WordPress la proiectele freelance sau Symfony framework la jobul de zi cu zi.

4 thoughts on “WordPress si cookies”

  1. Sunt incepatoare in crearea site-urilor.
    Am instalat word press pe site-ul meu si la autentificare primesc urmatorul mesaj
    EROARE: Cookie-urile sunt blocate din cauza unei ieșiri neașteptate. Pentru ajutor, te rog să consulți această documentație sau să accesezi forumurile pentru suport.
    Am facut setarile browserelor pentru cookie-uri si nu am rezolvat problema.
    Ce pot sa fac?
    Cu multumiri.

    1. Incearca un alt browser, poate ai mai mult noroc
      Incearca Opera, Firefox.
      Daca setarile iti sunt corecte ar trebui sa te poti loga fara probleme

Leave a Reply

Your email address will not be published. Required fields are marked *