Ketika Formulir API menghasilkan formulir, itu juga menghasilkan token yang dibagikan dengan formulir di bidang tersembunyi, dan diharapkan akan dikembalikan kembali. Jika ya, formulir diproses.
Jika bentuk yang diberikan di mana akan di-cache, katakanlah, oleh Varnish , mekanisme ini rusak. Pengguna pertama yang mengirimkan formulir akan menggunakan token, dan upaya berikut untuk menggunakan formulir akan ditolak.
Strategi apa yang tersedia untuk membuat form tetap berfungsi saat menyimpan form yang diberikan?
Jawaban:
Saya menggunakan BOA untuk situs saya, tetapi secara default BOA hanya menonaktifkan caching front end dengan cepat untuk pengiriman formulir. Di luar pengalaman saya yang sebenarnya, saya menemukan sebuah salib artifisial berumur satu tahun tentang bagaimana New Zealand Post menangani Drupal & Varnish dan masalah token formulir. Suci John Wayne, itu harus dibaca untuk caching Drupal - sebenarnya. Berfokus hanya pada formulir masalah:
Anda juga dapat menonaktifkan token formulir ketika produksi XSRF tidak diminta kembali di form_alter (tidak disetel ($ form ['# token']);) atau ($ form ['# token'] = FALSE;)
Sebuah Acquia Drupal kinerja Artikel menempatkan sebagainya sebuah Drupal Modul Authcache , tapi membaca doc pada Authcache, ia bekerja keluar caching dengan tempat dudukan untuk bentuk (tidak caching formulir):
Strateginya adalah, cache semuanya kecuali form . Jadi menangani semua hal lain: Mungkin Varnish tidak digunakan sama sekali, Memcache & Redis? Strategi saya adalah menggunakan apa yang ditawarkan BOA karena saya menggunakan BOA dan para penyihir di belakangnya ( omega8.cc ) tahu satu ton lebih banyak daripada saya. Saya tidak berpikir ada cache eksternal yang menyelesaikan masalah. Mereka semua tampaknya memotong formulir.
Lakukan caching parsial dengan authcache yang disebutkan di atas dan dengan Tampilan dan Panel yang diubah dengan halus seperti yang disebutkan dalam artikel NZ Post dan dijelaskan oleh kepercayaan otak di Wunderkraut - yang lama, tetapi membahas masalahnya.
Gunakan Drupal ESI Module dan Varnish yang sebagian sesuai dengan ESI):
Semoga itu lebih bermanfaat.
sumber
Salah satu solusi potensial adalah dengan menonaktifkan token bersama-sama dengan
$form[‘#token’] = FALSE;
, kemudian menimpa ajukan panggil balik ke alih-alih benar-benar memposting komentar, buat kembali formulir asli dengan token, dan minta pengguna untuk mengonfirmasi kiriman.Jika pengguna mendukung ECMAScript , seseorang dapat meningkatkan pengalaman pengguna dengan memiliki sumber daya layanan yang memaparkan pembuatan token formulir baru dan memasukkan formulir yang relevan ke dalam
form_cache
. Kemudian, segera setelah pengguna berfokus pada formulir, dan dengan demikian cenderung ingin mengirimkannya, nonaktifkan tombol kirim, ambil token baru dan masukkan ke dalam formulir yang sudah diberikan, dan aktifkan kembali tombol kirim.sumber