Incomplete payments via RCO causes session conflicts that renders parts of the store "uninloggable".

Description

Sessions destroyed, reason unknown.

Simulate the error:

  • Påbörja köp.

  • På signeringssida, stäng browser/flik och börja om från huvudsidan i butiken. Nu initieras ett närmast permanent läge från nedanstående kodrader.

I denna kontroll börjar nu pluginetn att köra "session destroy" på alla anrop. Det innebär att även admin kastas ut och får logga ut igen (har setts före denna incidenten). Vad som är extremt märkligt nu är att även inkognito-browsing påverkas av detta, alltså i en helt annan session där gammal kunddata inte borde existera.

Denna raden som inträffar precis innan kontrollerna görs kommer i detta kedet av helt okänd anledning fortfarande ligga och lagra det sensast genererade orderid't. Varför? Vi vet inte, men förhoppningsvis beror detta på Woocommerce sessionshanterare, att den helt enkelt baseras på besökarens ip-adress. Om inte så har WooCommerce ganska stora problem med sessionshanteringen.

En lösning vi provar köra in nu (behöver utreda varför sessionshanteringen fungerar så här från första början - kan mycket väl vara en legacylösning från tidigare liv) är - då det bara verkar beröra RCO - är att indikera i berörda session redan vid "purchase"-ögonblicket att kunden håller på att slutföra ett köp. Troligtvis är detta kopplat till just ett legacyproblem när RCO var i sin linda och det kunde förekomma borttappade interna orderreferenser.

Samma konstant som sätts vid RCO-läget i form av en define('OMNICHECKOUT_PROCESSPAYMENT') skall även sättas i sessionen. Om variabeln OMNICHECKOUT_PROCESSPAYMENT är sann när den kommer till ovanstående kontroll rensas sessionen endast en gång och variabeln nollas sedan. Den borde genom detta bara nollställas en gång och sedan bli normal igen.

Vi ska även ta bort detta, då det finns en överhängande risk att det inte bara är den lokala sessionen som städas upp, utan alla pågående:

Påverkar bara befintlig kund: https://developer.wordpress.org/reference/functions/wp_destroy_all_sessions/
cleanup_sessions rensar upp mer omfattande.

Environment

None

Test

  • Påbörja köp.

  • På signeringssidan, stäng browser/flik och börja om från huvudsidan i butiken. Med buggen är risken nu stor att användarsessionen är satt ur spel och ingen inloggning fungerar - inte ens vid cookierensning.

Samma beteende ska vara löst om...

  • Påbörja köp.

  • Landa på signeringen men lämna den.

  • Logga in på butikskonto incognito. Med buggen ofixad är risken stor att detta inte går.

Av någon anledning ärvs den trasiga sessionen ned en bra bit i lagren.

Activity

Show:
Tomas Tornevall
October 23, 2020, 10:02 AM
Edited

Tillagd i 1.2.7.15,

Done

Assignee

Unassigned

Reporter

Tomas Tornevall

Labels

Sprint

None

Fix versions

Priority

Medium
Configure