mewebstudio / pos

Türk bankaları için sanal pos paketi (PHP)
Other
267 stars 104 forks source link

Session Sorunu Hakkında #107

Closed onurryildirimm closed 1 year ago

onurryildirimm commented 1 year ago

Merhaba,

YKB ile 3d şifre gönderildikten sonra response sayfası "sipariş bulunamadı session sıfırlandı" tarzı bir hata dönüyor. Açıklama kısmında yazan şekilde bir kaç deneme yaptım ama sorunu çözemedim. örneğin Example dosyalarında nerelerde ne tarz bir değişiklik yapmamız gerek bu sorunu geçmek için ?

nuryagdym commented 1 year ago

Merhabalar, hangi PHP versiyon kullaniyorsunuz?

onurryildirimm commented 1 year ago

PHP 8.1 versiyonunu kullanmaktayım

nuryagdym commented 1 year ago

session extension enabled mi? emin degilseniz bu kodu calistirmayi dener misiniz:

if (!extension_loaded('session')) {
    die('You must enable PHP session support for the system to work.');
}

bazi shared hostinglerde default olarak session extension disabled geliyor

onurryildirimm commented 1 year ago

çalıştırdığımda herhangi bir hata dönmüyor. cpanel den kontrol ettiğimde session aktif gözüküyor image

nuryagdym commented 1 year ago

burda https://stackoverflow.com/questions/39750906/php-setcookie-samesite-strict/51128675#51128675 anlatildigi gibi samesite=None denediniz mi? Denerken taraycida gizli modda denenmesi iyi olur, yoksa taraycida var olan cookielerin samesite degerini guncellemeyebilir.

Redis kullandigimda bu sorunu yasamamistim, ama PHP session'da sorun cikiyor ara sira. Ben de session konusunda uzman olmadigim icin cokta bir yardimci olamiyorum.

erenilhan commented 1 year ago

"sipariş bulunamadı session sıfırlandı" bu mesaj ykb tarafından mı dönüyor? @onurryildirimm

onurryildirimm commented 1 year ago

template/_payment_response.php dosyasında

requestten sonrasına ;

if(isset($_COOKIE["PHPSESSID"])){ header('Set-Cookie: PHPSESSID='.$_COOKIE["PHPSESSID"].'; SameSite=None'); }

kod bloğunu ekledim. şimdi hata dönüşü olmadı. Deneme yapmaya devam edeceğim hata ile karşılaşırsam bilgi vereyim tekrar.

onurryildirimm commented 1 year ago

hayır _payment_response.php dosyasındaki hata bu

if (!$order) { throw new Exception('Sipariş bulunamadı, session sıfırlanmış olabilir.'); }

order değerini boş algılıyor session yok gibi ondan dolayı bu hatayı döndürüyor.

nuryagdym commented 1 year ago

SameSite=None sorunu giderdi mi?

onurryildirimm commented 1 year ago

SameSite=None sorunu giderdi mi?

Şu an sorun yok gibi gözüküyor, dediğim sayfaya bu kodu ekleyince response sayfası düzgün şekilde çalıştı. Çekim işlemi yaptım sorunla karşılaşmadım.

nuryagdym commented 1 year ago

dokumantasyona bakmakta fayda var :) https://github.com/mewebstudio/pos#session-s%C4%B1f%C4%B1rlanmas%C4%B1

nuryagdym commented 1 year ago

Not olarak yaziyorum, yukarda belirtilen stackoverflow kaynakta da belirtildigi gibi SameSite=None, Secure flag olmadan calismaz (yada calismayabilir). yani @onurryildirimm paylastigi kod

header('Set-Cookie: PHPSESSID='.$_COOKIE["PHPSESSID"].'; SameSite=None; HttpOnly');

yerine su sekilde kullanmaniz gerekebilir.

header('Set-Cookie: PHPSESSID='.$_COOKIE["PHPSESSID"].'; SameSite=None; Secure; HttpOnly');

Benim durumda Secure flag olmadan denedigimde session cookie, SameSite=None dememe ragmen, screenshot'ta goruldugu gibi SameSite deger bos olarak gozukuyor: image

Secure flag'le beraner kullanildiginda ise su sekilde gozukecek ve duzgun calisan sekli: image

Kod orneklerde symfony session component kullanilmaktadir, orda da dogru ayar su sekilde:

$sessionHandler = new \Symfony\Component\HttpFoundation\Session\Storage\NativeSessionStorage([
    'cookie_samesite' => 'None',
    'cookie_secure'     => true,
    'cookie_httponly'  => true,
]);
canerd7u commented 1 year ago

@nuryagdym bunu projede nereye nasıl ekleyeceğiz ?