Skip to content
Konsultasi

Login DeepSeek Hilang? Pindahkan Sesi, Jangan Rebuild Profil

Adityo Guni Waluyo

Profil Camofox kehilangan login DeepSeek? Saya pindahkan cookies HttpOnly dan userToken localStorage ke profil yang sama, tanpa rebuild.

Ringkasan

Sesi login DeepSeek di profil Camofox hilang karena ternyata ada dua lapis yang harus dipulihkan sekaligus: cookie HttpOnly di storage-state.json dan userToken di localStorage. Solusinya migrasi, bukan rebuild: ekspor cookies, dedupe by pasangan name-domain, injeksikan token via tiga skrip, plus keepalive polling tiap lima menit. Ingat, storage state itu kredensial plaintext—jaga seperti password dan regenerasi berkala.

Lane C butuh chat riset ketiga, DeepSeek, dan saya udah siapin profil Camofox khusus buat itu. Tapi waktu saya buka, login-nya ilang. Profilnya ada, extension-nya jalan, tapi DeepSeek minta login lagi dari awal.

Dugaan awal: mungkin cookie expired, restart aja pasti nyambung lagi. Nggak. Restart nggak ngubah apa-apa. Lalu saya pikir, ya udah login ulang manual lewat VNC aja. Tapi ini profile buat automation — kalau login-nya gampang hilang, tiap kali harus login manual itu ribet banget.

Jadi saya mulai mikir: bisa nggak saya "pindahkan" sesi login dari browser biasa ke profil automation ini?

Dua lapis kredensial

Yang bikin saya agak telat nemu solusinya: saya kira sesi login itu cuma satu hal. Ternyata nggak, ada dua lapis terpisah yang harus ditangani bareng.

Lapis pertama: cookie HttpOnly. Ini cookie yang dikirim browser ke server setiap request dan JavaScript nggak bisa akses, makanya namanya HttpOnly [4]. Di Playwright, cookie-cookie ini tersimpan di storage-state.json [1]. Format aslinya dari curl itu Netscape: satu cookie per baris, ada prefix #HttpOnly_ kalau cookie-nya punya atribut itu [3].

Lapis kedua: userToken di localStorage. Ini Bearer token yang dipakai untuk API calls DeepSeek. Beda sama cookie sesi web: token ini JavaScript yang pakai, bukan browser yang otomatis kirim [2]. Kalau cuma transfer cookies tanpa token ini, API calls tetap nggak terautentikasi.

Jadi saya butuh tiga skrip. Satu untuk import cookies dari browser biasa ke format Netscape, import-ds-cookies.py. Satu untuk injeksi Bearer token ke localStorage, inject-ds-token.py. Dan satu lagi keepalive biar sesi nggak mati tanpa pemberitahuan, yaitu skrip ds-vnc-keepalive.

Migrate, jangan rebuild

Opsi paling gampang memang recreate profil dari nol. Tapi itu destruktif: semua extension settings, session lain yang udah jalan, data yang tersimpan di profile itu ikut hilang. Saya pilih migrate: pindahkan sesi yang ada, tanpa ngebongkar profil.

Prosesnya: export cookies dari browser biasa, lalu parse file Netscape itu. Di import-ds-cookies.py, saya dedupe cookie by pasangan (name, domain); kalau ada duplikat, ambil yang expiry-nya paling jauh. Sebelum merge ke storage-state.json, backup dulu file yang ada. Dan cek endpoint /sessions dulu supaya nggak ada sesi aktif yang ketimpa.

Setelah cookies aman, injeksi userToken ke localStorage. Nilainya bukan string biasa karena DeepSeek bungkus dalam format JSON {value, __version}. Skrip inject-ds-token.py handle wrap itu.

Terakhir, keepalive. Ini bukan fetch keepalive atau websocket, cuma polling sederhana lewat tab nyata yang buka halaman sign_in. Tiap 5 menit, ds-vnc-keepalive.py ngecek localStorage: kalau userToken udah terisi, berarti login terdeteksi. Kalau belum, poll lagi. Total 12 iterasi, 5 menit masing-masing.

Kenapa ini masuk akal

Playwright simpan semua state terautentikasi (cookies, localStorage, IndexedDB) sebagai satu storage state [1]. Dan localStorage itu persisten across browser sessions per origin [2]. Artinya kalau kita punya cara isi ulang kedua lapis itu, kita bisa "pindahkan" login dari satu browser ke yang lain tanpa harus login ulang manual.

Yang perlu diingat: storage state itu credential plaintext, data yang bisa dipakai buat impersonate session kita. Treat file storage-state.json sama kayak password: jangan commit ke VCS, jangan share sembarangan. Pastikan file temporary-nya dihapus setelah dipakai, atau minimal di-gitignore. Storage state juga perlu regenerasi berkala karena nggak ada mekanisme auto-refresh bawaan, jadi kalau token expiry lama, prosesnya harus diulang manual.

Satu hal lagi: fingerprint headless browser beda dari browser asli. Platform kayak DeepSeek bisa aja deteksi perbedaan ini dan minta re-login. Cara ini work karena saya pakai Camofox, bukan Playwright headless murni, jadi fingerprint-nya lebih mirip browser asli. Kalau pakai Playwright default, belum tentu hasilnya sama.

Sumber:

Artikel terkait