Bagaimana cara membuat cookie persisten vs non-persisten?

Sepertinya saya tidak tahu cara membuat cookie persisten vs non-persisten. Apa perbedaannya, misalnya, pada header HTTP yang dikirim kembali?


person Chung Wu    schedule 06.10.2010    source sumber


Jawaban (4)


Cookie memiliki tanggal kedaluwarsa yang ditetapkan secara implisit atau eksplisit yang mengontrol berapa lama cookie tersebut bertahan (tergantung pada agen pengguna yang benar-benar menerapkannya). Cookie hanya dapat bertahan selama durasi sesi (atau bahkan lebih singkat).

Jika cookie valid, cookie tersebut akan diteruskan bersama dengan permintaan HTTP ke domain asalnya. Hanya domain yang menyetel cookie yang dapat membaca cookie tersebut (walaupun ada cara untuk mengeksploitasinya, seperti pembuatan skrip lintas situs).

  • Jika Anda ingin cookie kedaluwarsa pada waktu tertentu, tetapkan tanggal kedaluwarsa menggunakan bahasa sisi klien atau server pilihan Anda.

  • Jika Anda ingin cookie kedaluwarsa saat sesi berakhir, jangan tetapkan tanggal kedaluwarsa.

Dari RFC (penekanan dari saya):

Penyetel cookie dapat menentukan tanggal penghapusan, dalam hal ini cookie akan dihapus pada tanggal tersebut.

Jika pembuat cookie tidak menentukan tanggal, cookie akan dihapus setelah pengguna keluar dari browsernya.

Akibatnya, menentukan tanggal adalah cara untuk membuat cookie bertahan di seluruh sesi. Oleh karena itu, cookie dengan tanggal kedaluwarsa disebut persisten.

Sebagai contoh aplikasi, situs belanja dapat menggunakan cookie persisten untuk menyimpan barang yang dimasukkan pengguna ke keranjangnya. (Pada kenyataannya, cookie mungkin merujuk pada entri dalam database yang disimpan di situs belanja, bukan di komputer Anda.) Dengan cara ini, jika pengguna keluar dari browser mereka tanpa melakukan pembelian dan kembali lagi nanti, mereka masih menemukan item yang sama di keranjang sehingga mereka tidak perlu mencari barang tersebut lagi. Jika cookie ini tidak diberi tanggal kedaluwarsa, cookie tersebut akan kedaluwarsa saat browser ditutup, dan informasi tentang konten keranjang akan hilang.

person Tim Medora    schedule 06.10.2010
comment
Dan jika saya hanya ingin cookie bertahan selama sesi tersebut, tanggal kedaluwarsa berapa yang harus saya tetapkan? - person Chung Wu; 06.10.2010
comment
Terima kasih! Apakah itu berarti Set-Cookie tanpa klausa expired akan menjadi cookie sesi, dan akan hilang setelah browser dimulai ulang? Karena bukan itu yang saya lihat... Setelah saya melakukan Set-Cookie tanpa kadaluarsa, dan me-restart browser, saya masih bisa membaca cookie itu kembali. Apakah itu diharapkan? - person Chung Wu; 06.10.2010
comment
Saya memeriksa ulang untuk memastikan dan memposting beberapa tautan tambahan. Bahasa/server web apa yang Anda jalankan sehingga Anda melihat perilaku ini? - person Tim Medora; 06.10.2010
comment
Sobat, saya minta maaf karena mengubah ini menjadi sesi debugging! Saya menggunakan tiang, tapi saya hanya melihat header HTTP sekarang. Setelah melakukan Set-Cookie key=something; path=/;, memulai ulang browser, dan memuat ulang halaman, saya melihat cookie itu masih ada dalam permintaan. Tidak yakin apa lagi yang saya lewatkan... - person Chung Wu; 07.10.2010
comment
Jangan khawatir. Jika Anda melihat sistem file sebenarnya, dapatkah Anda melihat cookie disimpan di sana? Di IE pada Vista/Windows 7, cookie harus berada di C:\Users\[nama pengguna]\AppData\Local\Microsoft\Windows\Temporary Internet Files - person Tim Medora; 07.10.2010
comment
Saya akhirnya mengetahui apa yang terjadi. Di Firefox, jika Anda mengaktifkan pemulihan sesi (Saat Firefox dimulai: Tampilkan jendela dan tab saya dari terakhir kali), bahkan cookie sesi akan dipulihkan saat Anda memulai ulang! Lihat bugzilla.mozilla.org/show_bug.cgi?id=443354 - person Chung Wu; 13.10.2010
comment
Itu perilaku yang menarik...di satu sisi, sepertinya bug besar, di sisi lain, saya bisa mengerti mengapa pengguna non-teknis mengharapkan sesi mereka terus berlanjut. Secara teori, Anda dapat melakukan pemeriksaan terbatas terhadap skenario tersebut dengan melihat apakah sesi yang direferensikan oleh cookie tersebut benar-benar masih ada, meskipun menurut saya pemeriksaan seperti itu bisa sangat sulit dan rentan terhadap kesalahan. Cara yang lebih mudah adalah dengan menulis cookie persisten setiap kali halaman dilihat dengan tanggal, dan memeriksa sudah berapa lama sejak aktivitas terakhir. - person Tim Medora; 14.10.2010
comment
Tampaknya mengejutkan bahwa menambahkan tanggal ke cookie saja sudah menyebabkannya tetap ada. - person Robert Moore; 15.06.2017
comment
Bisakah kamu juga melakukan ini dengan max-age? - person Aaron Franke; 19.11.2019
comment
@AaronFranke - tampaknya Anda dapat membuat cookie tetap dengan max-age: tools.ietf.org /html/rfc6265#halaman-21 - person Tim Medora; 19.11.2019

Ada dua jenis cookie di ASP.NET

Cookie persisten:

Cookie disimpan di hard disk komputer Anda. Mereka tetap berada di hard disk Anda dan dapat diakses oleh server web hingga dihapus atau kedaluwarsa.

public void SetPersistentCookies(string name, string value)
{
    HttpCookie cookie = new HttpCookie(name);

    cookie.Value = value;

    cookie.Expires = Convert.ToDateTime(“12/12/2008″);

    Response.Cookies.Add(cookie);
}

Cookie non-persisten:

Cookies hanya disimpan ketika browser web Anda sedang berjalan. Mereka hanya dapat digunakan oleh server web sampai Anda menutup browser Anda. Mereka tidak disimpan di disk Anda.

public void SetNonPersistentCookies(string name, string value)
{
    HttpCookie cookie = new HttpCookie(name);

    cookie.Value = value;

    Response.Cookies.Add(cookie);
}
person Deepak.Aggrawal    schedule 02.08.2011

Kue sesi

HttpCookie cookie = new HttpCookie("myCookieName", "myCookieValue");
Response.Cookies.Add(cookie);

Cookie dengan stempel waktu tertentu (.NET DateTime library)

HttpCookie cookie = new HttpCookie("myCookieName", "myCookieValue");
cookie.Expires = DateTime.Today.AddMonths(12); //or AddMinutes, or AddHours...
Response.Cookies.Add(cookie);

Cookie Persisten

HttpCookie cookie = new HttpCookie("myCookieName", "myCookieValue");
cookie.Expires = DateTime.MaxValue;
Response.Cookies.Add(cookie);
person expertCode    schedule 07.06.2011

Cookie persisten memiliki tanggal kedaluwarsa yang dikeluarkan oleh server web. Pada dasarnya, cookie jenis ini disimpan di komputer Anda sehingga ketika Anda menutupnya dan memulainya kembali, cookie tersebut masih ada. Setelah tanggal kadaluwarsanya tercapai, maka dimusnahkan oleh pemiliknya.

Referensi: https://www.cookiepro.com/knowledge/what-is-a-persistent-cookie/

Jika cookie tidak berisi tanggal kedaluwarsa, maka cookie tersebut dianggap sebagai cookie sesi/non-persisten.

Jadi, pada dasarnya cookie persisten hadir dengan atribut expires mis.

expires="Wdy, DD-Mon-YYYY HH:MM:SS GMT"
person Saikat    schedule 10.12.2019