Dlaczego Chrome ignoruje lokalne pliki cookie jQuery?

83

Używam wtyczki jQuery Cookie ( pobieranie i demo oraz kod źródłowy z komentarzami ), aby ustawić i odczytać plik cookie. Opracowuję tę stronę na moim komputerze lokalnym .

Poniższy kod pomyślnie ustawia plik cookie w FireFox 3, IE 7 i Safari (PC). Ale jeśli przeglądarka to Google Chrome ORAZ strona jest plikiem lokalnym , to nie działa.

$.cookie("nameofcookie", cookievalue, {path: "/", expires: 30});

Co wiem :

  • Wersja demonstracyjna wtyczki działa z Chrome.
  • Jeśli umieszczę swój kod na serwerze WWW (adres zaczynający się od http: //), działa on z Chrome.

Więc plik cookie nie działa tylko w Google Chrome w plikach lokalnych .

Możliwe przyczyny :

  • Google Chrome nie akceptuje plików cookie ze stron internetowych na dysku twardym (ścieżki takie jak file: /// C: /websites/foo.html)
  • Coś w implementacji wtyczki powoduje, że Chrome odrzuca takie pliki cookie

Czy ktoś może to potwierdzić i zidentyfikować główną przyczynę?

Nathan Long
źródło
Kiedy mówisz, że wersja demonstracyjna działa, czy masz na myśli, że zapiszesz ją na dysku twardym i uzyskasz do niej dostęp jak file: //?
Greg
Nie - wystarczy uzyskać dostęp do powyższego linku w przeglądarce Chrome.
Nathan Long,

Odpowiedzi:

94

Chrome nie obsługuje plików cookie dla plików lokalnych (ani, jak wspomniał Peter Lyons, localhost *), chyba że uruchomisz go z flagą --enable-file-cookies. Możesz przeczytać dyskusję na ten temat pod adresem http://code.google.com/p/chromium/issues/detail?id=535 .

* Chrome nie obsługuje plików cookie w przypadku korzystania z lokalnego adresu IP (127.0.0.1) bezpośrednio. więc w przypadku hosta lokalnego może to być łatwiejsze obejście.

Matthew Crumley
źródło
Ustawienie domeny na IP nie zadziałało, ale zadziałało, gdybym usunął domenę (lokalnie, potrzebujemy domeny do produkcji)
Kyeotic
W systemie Mac OSX, aby uruchomić Chrome z flagą --enable-file-cookies, użyj komendy terminala: „open / Applications / Google \ Chrome.app/Contents/MacOS/Google \ Chrome --args --enable-file-cookies” - (lub dostosuj go zgodnie z lokalizacją Chrome.app)
Peeech
5

Miałem jakiś problem i rozwiązałem to straszne rozwiązanie. używanie jednocześnie wtyczki sklepu i pliku cookie.

<script src="js/jquery.cookies.2.2.0.js" type="text/javascript"></script>
<script src="js/jquery.Storage.js" type="text/javascript"></script>

var is_chrome = navigator.userAgent.toLowerCase().indexOf('chrome') > -1;

//get cookies
var helpFlag=(is_chrome)?$.Storage.get("helpFlag"):$.cookies.get("helpFlag");

//set cookies
if(is_chrome)$.Storage.set("helpFlag", "1");else $.cookies.set("helpFlag", "1");

Wiem, że to nie jest idealne rozwiązanie, ale dla mnie działa

Serdar Güner
źródło
4

To wykonało pracę za mnie:

wprowadź opis obrazu tutaj

Kliknij prawym przyciskiem myszy ikonę Chrome i wybierz Właściwości, kartę Skrót i dodaj pliki cookie - włączanie plików na końcu ścieżki docelowej.

paulalexandru
źródło
3

Miałem ten sam problem, spróbuj zamiast tego użyć adresu IP localhost. Na przykład „http://127.0.0.1/yoursite/”

Tiji
źródło
3

sprawdź Cookies i Google Analytics .

$.cookie("nameofcookie", cookievalue, {path: "/", expires: 30});

zmień tę linię na

$.cookie("nameofcookie", cookievalue, {*Path:* "/", expires: 30});

ten projekt działa dobrze.

chaoxfu
źródło
1
Dzięki, zmiana przypadku na „Path” napraw mój problem
Otto Kanellis
2

Inną możliwą przyczyną jest path: "/" , że ponieważ nie używasz zwykłego adresu URL, /prawdopodobnie nie znaczy to wiele - spróbuj w ogóle nie ustawiać ścieżki.

Greg
źródło
Dobra myśl, ale „/” i tak jest wartością domyślną. Próbowałem „file: /// C: /”, ale myślę, że w tym kontekście to bzdury.
Nathan Long
0

Jeśli używasz chrominum, jest to polecenie włączenia lokalnych plików cookie

chromium-browser --enable-file-cookies

To samo dotyczy chromu

Mam nadzieję, że to ci pomoże!

Elyes Frikha
źródło