Nasıl PHP ve ASP.net uygulama arasındaki oturumları paylaşmak ister misiniz?

6 Cevap

My company took some old php application over. Due to our preference to ASP.net and to the lack of any documentation from the previous developer, we do not want to spend much resources on developing in PHP. For implementing new features, we will create an Asp.net application that has the same look to the user. We want to develop a kind of 'coexisting' web application. Therefore we must share sessions between an PHP and an Asp.net webapplication project, because there is a usermanagement involved with an existing MySQL database.

(Örn. bağlantı 'A' PHP web sitesine yönlendirir ve bağlantı 'B' asp.net uygulama yönlendirir)

Nasıl ve PHP ve bir asp.net uygulama arasındaki oturumu paylaşabilir?

Ve herkes geliştirilmesinde faydalı olabileceğini, bu 'yandaş' bir şey için bir ipucu var mı?

Edit: 6 IIS 7.5 taşıyamazsınız, bizim hedef sunucu olurdu IIS de bir seçenek olacaktır

6 Cevap

Ben bunu yapıyor sona erdi nasıl, size söylemek istiyorum.

Her iki uygulama (Ben bir şekilde, içinde IDUser kodlanmış sanırım) ve bir tarih, bir MySQL veritabanı erişimi ve bir Guid, kullanıcı kimliği ve bir confirmationString oluşan bir "oturum" tablosu, erişmek.

Oturumlar sadece (PHP uygulama hala ana uygulama olduğunu, nedeni) PHP uygulaması tarafından başlatıldı. Yeni bir oturum günlük tabloda yeni bir girişi neden olacaktır. ASP.Net uygulaması bağlanan PHP uygulamalarında her bağlantı, vb Guid içeren, GET-Parametreler içeriyor

ASP.net uygulama GET-Parametreler denetler ve GET-Parametreler noktada eğer varolan bir oturuma, ASP.Net Oturum IDUser ayarlar.

PHP uygulama geri işaret bağlantıları aynı tekniği kullanın.

(Orada düşünecek başka şeyler aşımları veya çıkışlarını gibi de vardır, ama o da ele alınabilir)

Sonuçta, benim yaklaşım yararlıdır ve müşterilerinin hiçbiri (1 yıl önce) konuşlandırılması beri şikayet olduğunu söyleyebilirim

Ah sevgili, belki bir gün sen bu arada, senin yollarından hata görürsünüz .....

Varsayılan olarak, PHP oturuma göre adlı bir dosya içine tefrika dizi olarak oturum verileri yazar. Oturum adı PHPSESSID ile bir cookie tarafından genellikle tanımlanır.

Yani PHP elle oturumu okumak için:

$imported_session=unserialize(file_get_contents(session_save_path() . '/' . $_COOKIE[session_name()]));

Dosyanın biçimi ayrıştırmak çok kolay ve basittir.

Ancak onun gibi herhangi bir depolama (her biri yeniden yazmak zorunda kalmadan her sayfa ile revosed kodu ilişkilendirmek için nasıl otomatik prepend bir göz) için / herhangi bir formatta dosyaları yazmak için kendi PHP oturum işleyicisi uygulamak oldukça kolay. Veya çerez oturumu depolamak için kullanılan adını değiştirin.

C.

http://cz.php.net/manual/en/function.session-set-save-handler.php
http://support.microsoft.com/kb/317604

Sen MsSQL içine PHP'nin oturumları yazmak ve. NET oturumları için arka uç olarak MSSQL kullanmak üzere yapılandırabilirsiniz.

Sadece her iki tarafta oturum saklama mekanizmaları hackleyen daha bir güzel yolu OpenID sağlayıcısı kurma ve asp.net ve php uygulamaları hem OpenID tüketicilerin takmayı olacaktır.

Bunu yapmak için mevcut kod yeri var. Bu düşük seviye çözümleri daha hem de daha şık ve hata eğilimli olacaktır. Bir bonus olarak şirket uygulamaları kalanı entegre OpenID giriş kullanmak ve bir şirket kahraman haline gelebilir.

Bkz: Using OpenID for both .NET/Windows and PHP/Linux/Apache web sites

Bu eski bir soru, ama mevcut cevapları herhangi bir tam düşünmüyordu.

Birincisi, ben mysql veya SQL Server gibi bir veritabanı sunucusu oturum verilerini saklamak için kötü bir fikir olduğunu düşünüyorum. DB değerli bir kaynak olduğunu ve sadece oturum verisi için thrash için hiçbir neden yok.

Eğer böyle bir veritabanında oturum saklamak için gidiyoruz eğer, bunu yapmanın "iyi" yollar oturum veriler kendi bağımsız disk, vb olduğundan emin gibi, var .. ama gibi dürüstçe, ben hala hissediyorum hata ve ölçeklenebilirlik sınırlayacaktır.

Oturumu saklamak için, basit bir anahtar / değer mağaza ile gitmek, ve (ben de yeniden dağıtılmış + nodejs ile iyi şanslar yaşadım gerçi) bence sen memcached yenemezsin istiyorum.

memcached yeryüzündeki hemen hemen her dilde müşterileri var: http://code.google.com/p/memcached/wiki/Clients

Yani, temelde memcached kullanırken yapmanız gereken tüm anahtar için bir sözde rastgele belirteç oluşturmak ve bir memcached.set yapmaktır. Sonra session-id falan denir bir tanımlama bu anahtarı saklamak.

. Ve basit bir memcached.get ile alınan oturum değeri - session-id çerez herhangi bir sunucu dil, net, php, python, ne olursa olsun okunabilir.

Memcached docs göz atın: http://code.google.com/p/memcached/wiki/NewStart

Bu oturumları yapmak için çok basit ve ölçeklenebilir bir yoludur, ve neredeyse herhangi bir dil / sunucu ile çalışır.

Ben PHP ve ASP.NET arasındaki oturumları paylaşmak için doğal mümkün olduğunu sanmıyorum.

Ancak, oturumun içeriğini okur gizli alanlar bunları saklar ve daha sonra bu alanları okumak ve ASP.NET oturum halinde onlara yük olacak bir ASP.NET sayfasını çağırmak bir PHP sayfasını kullanarak mümkün olabilir.

Teorik olarak bu mümkün.