Znikające ciasteczka po ponownym wejściu na stronę

Znikające ciasteczka po ponownym wejściu na stronę
R1
  • Rejestracja:około 5 lat
  • Ostatnio:prawie 5 lat
  • Postów:3
0

Witam.
Stworzyłem skrypt, dzięki któremu po wejściu na stronę wyświetlany jest komunikat odnośnie przetwarzania danych i polityki cookies. Poniżej znajduje się również lista partnerów współpracujących ze stroną i przy każdym z nich widnieje link do polityki prywatności oraz checkbox, dzięki któremu można zatwierdzić poszczególnego partnera. Wszystko działa prawidłowo. Po zaakceptowaniu okna, ciasteczka zostają zapisane prawidłowo i wszystkie ciasteczka dla partnerów (jest ich 585 + jedno ogólne odnośnie zaakceptowania popupa) zostają utworzone z wartością true lub false, w zależności od zaakceptowania. W zakładce "Dane" przy cookies dla danej strony jest jedynie problem, że nie widać tam ciasteczka dla partnera z indeksem zerowym, jednak po wpisaniu w konsoli document.cookie lub użyciu stworzonej przeze mnie funkcji getCookies("popup-checkbox-0"); ciasteczko to jest widoczne. To pierwszy problem. Drugim jest to, że gdy strona zostanie zamknięta i ponownie się na nią wejdzie to większość ciasteczek po prostu znika, a zostają wyłącznie od popup-checkbox-420 aż do końca. Co się dzieje z pozostałymi 420 ciasteczkami? Nie mam pojęcia. Po wpisaniu document.cookie również pojawiają się tylko ciasteczka od popup-checkbox-420 w górę + jedno ogólne dla popupa. Mam nadzieję, że ktoś z Was może będzie wiedział i mi pomoże. Poniżej zamieszczam kawałek kodu, a konkretnie funkcji, która odpowiada za wciśnięcie przycisku akceptacji, jednak to raczej nie z kodem jest coś nie tak, ponieważ domyślnie działa on prawidłowo (z wyjątkiem tego, że nie widać zerowego ciasteczka w Danych). Problem pojawia się dopiero przy ponownym wejściu na stronę.

PS: trzeci argument w funkcji setCookie (1), to liczba dni na jaką ustawiane jest ciasteczko.

Kopiuj
function acceptPopup(amount) {
      console.log(amount)
      for (i = 0; i < amount; i++) {
        let checkbox = document.getElementById("popup-checkbox-" + i).checked;
        if (checkbox) {
          setCookie("popup-checkbox-" + i, true, 1);
          console.log(i + ' true');
        } else {
          setCookie("popup-checkbox-" + i, false, 1);
          console.log(i + ' false');
        }
      }
      setCookie("popupCookies", true, 1);
      window.onscroll = function () { };
      document.body.removeChild(popup);
    }
edytowany 2x, ostatnio: rafalek1001
gk1982
a jak wygląda funkcja setCookie ?
R1
  • Rejestracja:około 5 lat
  • Ostatnio:prawie 5 lat
  • Postów:3
0

Poniżej wrzucam funkcję setCookies oraz wycinek fetchowania danych z API:

Kopiuj
function setCookie(name, value, days, path, domain, secure) {
  if (!navigator.cookieEnabled) return;
  const e = encodeURIComponent;
  let cookie = e(name) + "=" + e(value);
  if (typeof days === "number") {
    const date = new Date();
    date.setTime(date.getTime() + days * 1000 * 60 * 60 * 24);
    cookie += "; expires=" + date.toGMTString();
  }
  if (path) {
    cookie += "; path=" + path;
  }
  if (domain) {
    cookie += "; domain=" + domain;
  }
  if (secure) {
    cookie += "; secure;";
  }
  document.cookie = cookie;
}
Kopiuj
fetch(url)
      .then(response => response.json())
      .then(data => {
        let vendors = data.vendors;

        popup_button_reject.addEventListener('click', rejectPopup, false);
        popup_button_accept.addEventListener('click', acceptPopup.bind(e, vendors.length), false);

        return vendors.map((vendor, index) => {
          let popup_body_li = document.createElement("li"),
            popup_body_li_span = document.createElement("span");

          popup_body_li.setAttribute('class', 'popup-body-li');
          popup_body_li_span.setAttribute('class', 'popup-body-li-span');

          popup_body_li_span.innerHTML = `<strong>${vendor.name}</strong> <a href="${vendor.policyUrl}" target="_blank">Privacy Policy</a> <input type="checkbox" class="popup-body-li-checkbox" id="popup-checkbox-${index}" checked>`;
          popup_body_li.appendChild(popup_body_li_span);
          popup_body_ul.appendChild(popup_body_li);
        })
      })
      .catch(error => console.log(error))
edytowany 3x, ostatnio: rafalek1001
R1
  • Rejestracja:około 5 lat
  • Ostatnio:prawie 5 lat
  • Postów:3
1

Metodą prób i błędów doszedłem do wniosku, że problem leży w limicie ciasteczek w poszczególnych przeglądarkach na daną domenę. Dziwi mnie tylko, że dosyć trudno mi było na ten temat jakiekolwiek informacje znaleźć w internecie. Sprawdziłem również jak to wygląda na innych stronach, gdzie podobnie można zaakceptować poszczególnych partnerów, a ich liczba jest spora. Z tego co zauważyłem, tworzone jest jedno ciasteczko, które zawiera zakodowany ciąg znaków i chyba (?) to tam jest to wszystko zawarte. Wie ktoś może czy jest jakiś prosty sposób na upchanie obiektu do postaci prostego, niedługiego stringa?

EDIT: Rozwiązałem ten problem poprzez kodowanie wartości false i true do zera i jedynek. Nie wiem czy jest to optymalny sposób a tym bardziej praktyczny, ale jeżeli ktoś jest lepiej w tym rozeznany to może się wypowiedzieć :D Poniżej kod funkcji:

Kopiuj
function acceptPopup(amount) {
      let vendors = "";
      for (i = 0; i < amount; i++) {
        let checkbox = document.getElementById("popup-checkbox-" + i).checked;
        if (checkbox) {
          vendors += "1";
        } else {
          vendors += "0";
        }
      }
      setCookie("popupVendors", vendors, 1);
      setCookie("popupCookies", true, 1);
      window.onscroll = function () { };
      document.body.removeChild(popup);
    }
edytowany 1x, ostatnio: rafalek1001
Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)