Nous rencontrons un problème étrange avec le processus de paiement de notre application Web, ce qui entraîne la perte de données de session.
Dans ce processus, une fois que notre page de paiement est redirigée vers la page du fournisseur de paiement et redirigée vers notre site (vers une URL que nous spécifions) dès qu'il y a terminé. Cette dernière redirection est effectuée par l'évaluation par le navigateur du code html du fournisseur de paiement qui consiste essentiellement en un formulaire qui publie sur notre site et en quelques lignes de code javascript qui publie ce formulaire au chargement de la page. À ce stade, le navigateur effectue la demande de publication, mais ne définit pas le cookie "ASP.NET_SessionId" qui est présent dans les demandes précédentes effectuées sur le même domaine (le domaine de notre application). Ce qui est plus étrange, c'est qu'il définit un autre cookie que nous utilisons, nommé "AcceptCookie". Il choisit simplement de supprimer le cookie "ASP.NET_SessionId".
Pour illustrer la situation, j'ai pris quelques captures d'écran. (Dans ces captures d'écran, les rectangles orange et verts contiennent exactement la même valeur.)
- Il s'agit de la demande qui a été faite (à notre application) lorsque l'utilisateur appuie sur le bouton "Check Out". Après cette demande, l'utilisateur est redirigé vers la page du fournisseur de paiement.
- Il s'agit de la dernière page qui est servie par le fournisseur de paiement une fois que l'utilisateur y a terminé. Comme vous pouvez le voir, ce n'est qu'un simple formulaire qui est automatiquement publié sur notre domaine lors du chargement de la page.
réponse finale du prestataire de paiement
- Mais cette demande de publication n'inclut pas le cookie "ASP.NET_SessionId" qui entraîne l'acquisition d'un nouvel identifiant de session et la perte des données de session précédentes. Et encore une fois, juste "ASP.NET_SessionId" est manquant, pas l'autre nommé "AcceptCookie".
Enfin, nous avons pensé que sur les anciennes versions des navigateurs, ce problème ne se produit pas. Sur Firefox 52, cela fonctionne comme un charme, mais sur Firefox 71, le problème ci-dessus se produit.
Des idées?
Remarque: Il s'agit d'une application ASP.NET MVC avec targetFramework = "4.5.2"
Bonne journée.
J'ai modifié plusieurs réponses SO pour arriver à cette réécriture d'URL qui ajoute
SameSite=None
aux cookies de session, et aussi supprimerSameSite=None
de tous les cookies pour la plupart des navigateurs incompatibles. Le but de cette réécriture est de conserver le comportement "hérité" pré-Chrome 80.Rédaction complète sur mon blog Coder Frontline :
Cela devrait fonctionner pour la plupart des applications ASP .Net et ASP .Net Core, bien que les cadres plus récents disposent de code et d'options de configuration appropriés pour vous permettre de contrôler ce comportement. Je recommanderais de rechercher toutes les options disponibles avant d'utiliser ma réécriture ci-dessus.
la source