ajax ile cookieless oturumları

1 Cevap php

PHP & ile oldukça "büyük uygulama" gelişmekte oldum biraz-başarılı benim çatınızdaki kimlik doğrulama mekanizması kullanılarak 2 yıl geçmiş Kohana çerçeve. app büyümüş olarak ama bu süre içinde, ve birçok ilgili devlet koruma sorunları ortaya.

ana sorun bu çerez odaklı oturumları şunlardır:

  • Web servis erişimi için kullanılamaz (en azından bunu yapmak için gerçekten güzel değil ..)
  • mobil erişim sorunlu birçok durumda
  • Aynı tarayıcıda aynı anda birden çok uygulama (sert hile ile çözülebilir, ama yine de ..) izin vermez
  • % 100 doğru çalışması için birçok yapılandırmaları ve karmaşa gerektirir ve bu olmadan var - (devre dışı kurabiye, eski tarayıcıların hata ve güvenlik açıkları vb) tarayıcı sorunları

Bu eski iplik belirtilen diğer birçok oturumu kusurları: http://lists.nyphp.org/pipermail/talk/2006-December/020358.html

Gerçekten uzun bir araştırma sonrasında ve herhangi bir iyi kütüphanesi olmadan / on-el-çözüm ayakları benim ihtiyaçları için, ben bu sorunları çoğunluğu için özel bir çözüm geldi.

The solution i thought about is not using cookies (for statefullness) . instead emulating it by passing back & forth a session-token through the ajax requests. For security, the session token is regenerated on each request. Also, a fingerprint (referrer, OS, clientVer ) is saved on session creation, and validated on each request.

From the first glance that supposed to be not-less-secure than equivalent cookie-driven implementation, and at the same time it's simple, maintainable, and resolves all the cookies flaws.. But i'm really concerned because i often hear the rule "don't try to implement custom security solutions".

Ben gerçekten bu yöntemle ilgili herhangi bir ciddi geri bildirim ve herhangi bir alternatifleri takdir edecektir.

  • Ayrıca, çerezler olmadan sayfa-tazelede durumunu korumak için nasıl hakkında herhangi bir ipucu harika :) ama küçük bir teknik prob şu olacaktır.

  • Ben bazı benzer bir yazı gözardı eğer özür dilerim .. oturumları hakkında onlardan milyarlarca var.

Önceden (ve burada dek okumak için!) Big teşekkürler.

1 Cevap

I think the simplest way it's by using anyway the php session technology but without cookies. To archive this result you need just few php functions, but you must send one more var to every GET request.

session_start();
if(isset($_GET['SESSIONID']))
{
    session_id($_GET['SESSIONID']);
}
echo "<script>var SESSIONID = '".session_id()."';/script>"; 
//session_id() autogenerates a new hash for every new session but you can you the algorithm that you prefer.

Sadece url eklemek gerekir böylece Tamam, şimdi her JS komut Eğer session id var.