Saya sedang mengerjakan aplikasi PhoneGap dengan penggunaan sesi server. Dibutuhkan cookie untuk menangani sesi tersebut. Selain itu, cookie dari load balancer juga harus ditangani. Jadi tidak ada jalan lain. Bagaimana Anda menangani Cookies di aplikasi PhoneGap?
Saya telah menyelesaikan beberapa penelitian:
- Beberapa orang mengatakan penanganan cookie mungkin bergantung pada server yang tidak menyetel cookie untuk agen pengguna yang tidak dikenal (IIS): sesi PhoneGap (cookie) di iOS
- Dalam JavaScript, cookie dapat disetel dengan document.cookie = ..., tetapi tidak disimpan di PhoneGap dan hilang. Sebelum mengaktifkan permintaan xhr, ini berfungsi.
- Cookie dapat diambil setelah permintaan xhr dengan xhr.getResponseHeader ('Set-Cookie'). Tetapi hanya jika benar-benar diatur di server. Sayangnya, jQuery menghapus header "Cookie".
- Properti document.cookie JavaScript tidak ditetapkan dan tidak diperbarui setelah permintaan (xhr).
- Beberapa menyarankan localStorage untuk menyimpan id sesi dll. Tetapi semua skrip dapat mengaksesnya dan ini mungkin merupakan masalah keamanan XSS. Cookies mengatasi masalah ini dengan menggunakan bendera httponly.
- iOS: Ada beberapa modifikasi yang akan mengubah perilaku webView untuk mendukung cookie. Namun tampaknya tidak berfungsi dengan iOS 6 dan PhoneGap 2.5: https://groups.google.com/forum/?fromgroups=#!topic/phonegap/ZJE1nxX63ow
- Cookies tampaknya diaktifkan secara default di AppDelegate.m (v2.5).
cordova
cookies
xmlhttprequest
Bernd
sumber
sumber
Jawaban:
Sobat, saya juga tidak berhasil menggunakan cookie dengan phonegap. Solusinya adalah menggunakan localStorage.
Contoh Cepat Utama:
Contoh Set Item Cepat:
Dapatkan Contoh Item Cepat
Hapus Item Contoh Cepat:
Hapus Contoh Cepat:
Jika Anda menggunakan javascript untuk seluler dan web, Anda dapat menggunakan kode ini untuk mendeteksi lingkungan itu:
Referensi: http://docs.phonegap.com/en/1.2.0/phonegap_storage_storage.md.html#localStorage http://cordova.apache.org/docs/en/6.x/cordova/storage/storage.html # halaman-ke-sumber
Hati-hati: menggunakan navigasi anonim di iOS dapat membuat penyimpanan lokal tidak berfungsi seperti yang dipantau. Tes sederhana yang berfungsi dengan baik untuk saya:
sumber
Mirip dengan Anda, saya ingin menggunakan cookie yang ditetapkan oleh server dalam aplikasi saya sehingga aplikasi saya akan konsisten dengan web dan tidak memerlukan ID perangkat terpisah atau metode lain untuk otentikasi.
Apa yang saya temukan adalah sebagai berikut:
$.get()
atau$.post()
) tidak bertahanCara agar cookie tetap ada adalah dengan menggunakan plugin inAppBrowser .
Pertama, siapkan server sederhana yang menerima sebagai parameter nilai kunci GET yang ingin Anda pertahankan. Saya orang python / tornado, jadi server saya mungkin terlihat seperti:
Kemudian, di aplikasi Anda:
Anda kemudian dapat menyebutnya sebagai berikut:
sumber
Anda juga dapat menambahkan id sesi ke url yang meminta dan bergantung pada bahasa aplikasi server, mengambil data sesi menggunakan nilai id sesi string kueri yang Anda berikan - contoh di PHP Anda dapat membuka sesi yang ada dengan meneruskan id sesi. Meskipun ini tidak disarankan karena risiko pembajakan sesi, Anda dapat dengan mudah menguji IP dan Browser untuk memastikan sesi tersebut berasal dari klien yang sama. Ini tentu saja mengharuskan Anda mengakhiri sesi Anda segera setelah klien menutup browser sesi dan akan membatasi Anda dari tampilan cache karena sesi akan disertakan dalam html yang sebenarnya. Menyimpan data di perangkat lokal bagi saya setidaknya bukanlah pilihan karena terlalu banyak mengekspos ke klien yang menurut saya merupakan risiko keamanan yang jauh lebih besar.
sumber
$.post()
di jQuery, lalu menyetel variabel lokal. Jika Anda mengenkripsi semuanya, itu cukup aman.Gunakan
device_id
untuk menangani catatan tertentu di sisi server. Buat tabel database bernamasession
pada server Anda dengandevice_id
,cookiename
,cookievalue
dantimestamp
sebagai kolom.Ketika klien mengakses server web Anda melalui aplikasi phonegap, dapatkan miliknya
device_id
dan simpan cookie di tabel Anda. Thedevice_id here
bertindak sebagai akses token protokol OAuth.Sekarang demi alasan keamanan, Anda perlu mengurangi periode validitas record tersebut, karena device_id adalah permenant dan klien Anda ingin menjual ponselnya suatu hari nanti. Oleh karena itu, gunakan
timestamp
untuk menyimpan akses terakhir oleh klien, dan hapus catatan jika belum diakses selama, katakanlah 10 hari.sumber
Saya menggunakan Cordova 6.1 (versi terbaru saat ini) dan sebenarnya saya menemukan yang berikut:
Jika saya mengatur cookie melalui Javascript menggunakan document.cookie = ... maka itu tidak berfungsi. Namun jika saya mengirim fungsi setCookie melalui Ajax ke server dengan fungsi seperti
dan mengatur cookie di sisi server menggunakan
maka itu benar-benar berhasil!
Semoga ini membantu. Bersulang
sumber
Punya masalah yang sama, dan memutuskan untuk memindahkan evrth ke localStorage Saya menulis plugin sehingga Anda dapat menggunakannya juga: angular-cookies-mirror
sumber
Tentu saja Anda bisa.
Aplikasi ionik hanya mengirim requset ajax, cookie berfungsi dengan baik atau tidak tergantung pada server.
Saya telah bekerja dengan server python Django dan server node, kedua cookie bekerja dengan sangat baik
kode simpul di bawah ini
api istirahat
kode aplikasi ionik
Anda dapat memeriksa kode sumber saya di sini
sumber
Saya pikir pertanyaannya pada dasarnya adalah tentang mengatur cookie sisi klien untuk aplikasi cordova. Sebagian besar informasi tentang topik ini menyiratkan bahwa pengaturan cookie sisi klien tidak berfungsi untuk cordova.
Tetapi saya menemukan plugin yang memungkinkan saya mengatur cookie sisi klien untuk aplikasi cordova saya.
Lihat https://www.npmjs.com/package/cordova-plugin-cartegraph-cookie-master .
Ini berhasil!
sumber
Saya juga mengalami masalah cookie sesi dengan permintaan Cordova + XHR. Cookie akan hilang setiap kali aplikasi dimulai ulang. Dua hal telah menyelesaikan masalah saya:
Cookie harus memiliki tanggal kedaluwarsa.
Semua permintaan XHR harus memiliki flag withCredentials yang disetel ke true.
sumber