Çapraz etki oturumları - paylaşılan alışveriş sepeti çapraz etki

10 Cevap php

Biz eshop (php, mysql) ile problem çözme. İstemci paylaşılan alışveriş sepeti ile iki etki aynı eshop istiyorum. Mağaza müşteri kullanıcıların hesabı olmadan alışveriş yapabilirsiniz (günlüğe olamaz). Ve sorun paylaşılan alışveriş sepeti çapraz etki alanı yapmak için nasıl vardır.

Sepetinden veriler, çok veritabanında saklanır ki, seans saklanır. Ama biz etki üzerinden veri taşıma sorunu çözemez. Unlogged kullanıcıyı belirleme holeproof değildir (research).

The example, how it should work

Müşteri domainOne ve sepetinize bazı şeyler eklemek için gider. O (ancak bağlantı, yazarak domain adresi ile) domainTwo gider ve sepeti diğer bazı şeyler eklemek daha. Sepetinize yılında (canlandırıcı sayfadan sonra) iki etki alanından gelen şeyler vardır.

Eğer bu sorunu çözmek için nasıl bir fikrin var mı?

What didn't work:

  • yönlendirme nedeniyle müşteri istekleri mümkün değildir
  • çerezleri etki ile ilgili
  • diğer etki ile set_cookie işe yaramadı
  • unlogged kullanıcıları tanımlamak wholeproof nasıl, simpliest yolu (cookie saklanan) sadece Sessionıd üzerinde taşımak için ama biz bilmiyoruz.
  • veriler çerezler dışında istemci tarafında saklanabilir diğer herhangi bir yer var mı? (Muhtemelen)
  • Biz kullanıcı diğer etki alanı elde edebilirsiniz nasıl, bcs biz bilmiyoruz, (kullanıcı tıklama diğer etki bağlantı varsa) url Parametreleri ile Sessionıd gönderme veya başlık referer çözümleme kullanamazsınız.

Beni anlamak yapamıyorsanız, bana bir soru alır. Eğer, paylaşılan (ortak) arabası ile iki etki eshop olan kötü bir fikir olduğunu, bana söyleme düşünüyorsanız, bunu biliyoruz.

Her cevap için teşekkürler.

10 Cevap

Tüm etki üzerinden müşterileri belirlemek için üçüncü bir etki alanı kullanabilirsiniz.

Örneğin bir PHP dosyası kullanma http://thirdDomain.com/session.php bu iki dükkan tüm sayfalarda yer almaktadır.

Örnek:

<script type="text/javascript" src="http://thirdDomain.com/session.php"></script>

Müşteri etki geçer sonra, üçüncü alanını kullanarak aynı müşteri olarak onu tespit edebilirsiniz.

Her iki dükkan sepeti erişmek için üçüncü etki oturum kimliği hem dükkan session id atayabilirsiniz. Sadece (yani parametre olarak ekleyebilirsiniz) Senin dükkan oturumları hakkında üçüncü alanını bilgilendirmek gerekir.

Depending on how flexible you are with your code and templates, you can even use an output from the third domain to define the session id in your shops. This way you can use the same session id on all domains. But normally a session id assignment should be the more secure way.

Using the javascript version you can also output scripts that may add a session id to all outgoing links and forms to the other domain in the current html page. This might be interesting if you can identify your customer as having cookies blocked. You can also use the javascript to inform the parent document about an existing session.

Bu sordu, almaya devam ediyor.

SSO için bir arama var.

Daha sonra, URL session id geçmek (veya POST vai) etki alanları arasında gerekir:

1) oturumu kontrol zaten hedef etki yok

2) gönderilen oturum kimliğini kullanarak oturumu rebind

örneğin

if ((!$_COOKIE[session_name()]) && $_GET['passed_id']) {
    if (check_session_exists($_GET['passed_id'])) { 
        session_id($_GET['passed_id']);
    }
}
session_start();
...
function check_session_exists($id)
{
   $path=session_save_path() . $id;
   if (file_exists($path) && (time()-filemtime($path)<session_cache_expire())) {
      return true;
   }
   return false;
}

Bu da eklemek gerekiyor demektir? 'Passed_id ='. diğer etki alanına işaret eden herhangi bir URL urlencode (session_id ()).

C.

Şema oldukça basit ve yaygın olarak kullanılmaktadır. Google için tarafından örneğin sayısız hizmetler var. Sen fikir almak için tarayıcı ve çeşitli google hizmetleri arasında HTTP alışverişini aşağı izleme bütün bir resim var.

Bizim müşteri 1 etki alanı için yetkili olduğunu varsayalım. Ikinci alma, biz var:

  1. Bir oturumu başlatmak ve bunu bazı belirteci saklayın.
  2. nasılsa 1 domain istemek ve birlikte bu belirteci göndermek için tarayıcı isteyin.
  3. 1 domain müşterimizi tanımak ve bu belirteci ve kullanıcı kimliği arasında ortak bir veri tabanında bir bağlantı yapacaktır.
  4. Tekrar ikinci bir etki alanı isteyerek, biz yetkili zaten oturumu başladı için olacak.

Tek soru 1 domain istemek için nasıl kalır. Bu bir resim olabilir, veya JS isteği veya tüm sayfa yönlendirme yapabilirsiniz. Bazı seçim size kalmış.

SSO.

CartA has iframe that 1) checks if the user is "active" (has session) 2) creates anon session CartB has iframe that do 1) or 2)

SSO etki (eğer varsa herhangi bir etki alanı) den iframe yükler

SSO çözüm: sizin inşa veya başkaları kullanır - simpleSAMLphp falan gibi ...

Ve URI'lar ile oturum / params geçmesine gerek yok olmalı ...

Çerezlerin dışındaki yerlerde (örneğin Flash çerezleri, localStorage) verileri saklayabilirsiniz ama tüm web standart bir güvenlik modeli olan, aynı kaynak politikasını kullanmak: bir etki alanı tarafından saklanan veriler sadece ulaşılabilir etki alanı ve alt etki alanları. Standart çözüm sayfanın içine yabancı etki bir iframe gömmektir. Bu iframe yabancı etki çerezleri erişebilir ve onun url iletişim sağlayan yerel etki tarafından kontrol edilecektir.

Buna göre basit bir çözüm (DomainA oturumkimliği, EtkiAlanıB oturumkimliği) çiftlerinin bir tablo var olmaktır. Yeni bir kullanıcı DomainA için geldiğinde, (yeni oturumkimliği, NULL) tabloya eklenir; kendisine gösterilen sayfa kaynağı görünmez bir iframe var = http://domainB/mergeSessions.php?sessionA=1234. mergeSessions.php sonra çerez olarak bir URL parametresi ve sessionB gibi sessionA almak ve buna göre seans bağlantı tablosunu güncelleştirmek olacaktır.

Eğer IP tarafından ziyaretçi tanımlamak deneyebilir, tarayıcı türü, tarayıcı sürümü, işletim sistemi, ekran çözünürlüğü, ve başka ne ile geldi. Birisi sitesi ya eriştiğinde paylaşılan veritabanında depolamak.

Eğer, küçük bir zaman penceresi içinde, demek < 5 dk, bu parametreler ile bu IP istekleri geldiğinde, reasonably Bu aynı kullanıcı olduğunu varsayabiliriz. Yine, size bu kullanıcıyı tanımlamak için bulabilirsiniz bulabileceğiniz her şeyi kullanmak ve hiçbir şekilde bu konuda güvenli bir şey temel veya kaçırma tabi olacaktır emin olun.

Ne bu böyle bir şey değil, olsa ne kadar iyi olurdu emin hakkında.

Kullanıcı store1 gider. Kullanıcı oturum tanımlama yoksa, oturum kimliği soran ve geri dönmek için store1 üzerinde url gönderme mağaza2 özel bir sayfaya yönlendirir. Özel sayfası oturum tanımlama bakar ve (@ symcbean tarafından cevap gibi) oturum kimliği ile store1 üzerinde orijinal url geri yönlendirir. Sonra store1 üzerine, oturum tanımlama ayarlamak (veya yeni oluşturulan) ve daha fazla yönlendirme olur alır. Ve sonra kullanıcının oturum tanımlama ile mağaza2 üzerinde ise aynı ama oposite.

Kullanıcı tanımlama etkin yoksa Ama oluyor sonsuz bir döngü görebilirsiniz. Başka bir şekilde algılamak ve durdurmak mümkün olsaydı emin olun.

Ama bu yol en iyi hacky olurdu.

1) Obviously, use the same session-store for both domains (files, database, memcached, the usual suspects.
2) If after session_start() the $_SESSION is empty, create an 'all domains' array in the session (do this on every domain, regardless which one it is, ).

$_SESSION['all_domains'] = array(
    'domain1.com'  => true, //<= current domain the customer is on,
    'domain2.com'  => false, //other domain, no cookie for it yet.
    'domain2.com'  => false); //repeat for all domains needed

3) tüm alanlarında bir oturum-setter komut dosyası oluşturun (en 'sesset.php' diyelim:

 <?php
     if(isset($_GET['sessid']){
          session_id($_GET['sessid']);
          session_start();
          //also, check here for the domains:
          if(!isset($_SESSION['all_domains'])){
              //set the array as before, flag this domain as true.
          } else {
              $_SESSION['all_domains'][$_SERVER['HTTP_HOST']] = true;
              //you might want to set a custom domainname instead of HTTP_HOST, so you won't get doubles from domain with & without www. and so on.
          }
     }
 ?>

4) akla gelebilecek her php HTML sayfasında, vücudun sonuna bu bir yere koymak:

 <?php
     foreach($_SESSION['all_domains'] as $domain => $domainset){
         if(!$domainset){
             echo '<img src="http://'.$domain.'/sesset.php?sessid='.session_id().' width="1" height="1"/>';
         }
     }
 ?>

Fullproof, ancak hemen hemen tüm kullanıcıları almazsınız. Tabii, bir yerine, 'gizli görüntüleri' bir yönlendirme çağlayan ile yapabilirdi, ama searchbots (ark google.) Çok bu konuda karışık, onlar çerez hatırlamıyorum özellikle ve tekrar & yönlendiriliyorsunuz sıkışmış tekrar.

easyXDM is a framework that allows the user to easily work around the Same Origin Policy. Its built-in RPC feature is very easy to use, and you should be up in running in no-time.

Durum için, 'checkout'-domain (A) olmak üzere etki birini seçin - bu oturumu saklı tutacak etki alanıdır. Aynı etki Eğer diğer etki (B) gönderilen veri almak / saklamak için sorumlu bir easyXDM bitiş noktası ile küçük bir dosya oluşturun.

Şimdi, etki alanı B, sen easyXDM içerir ve arabası veri alma / saklarken, yerine RPC yöntemleri erişim.

Option 1 Use Iframes:

  • Site 1 Site 2 bir Iframe vardır
  • Site 2 sitenin 1 bir Iframe var

Bir kullanıcı siteye bir bir öğeyi seçtiğinde, dinamik bir dize yani domain2.com/iframe.php? Itemid = someitem için iframe değerini ayarlayın.

Iframe etkialanı2 kapmak PHP ile $ _GET bilgiye sahip ve kullanıcının çerez güncelleyin.

Diğer yönde aynı yapın.

Option 2: Javascript includes

Sen başka bir siteye kullanıcının çerez içeriğini "çekme" için PHP tarafından oluşturulan JS dosyaları dahil çapraz site ile benzer bir şey yapabilirsiniz.

Option 3: Curl

Sadece bir etki alanından diğerine veri göndermek, böylece hem bir kopyası var. IP adresi veya diğer tanımlayıcı bilgileri çoğaltılamaz olamaz hiçbir garantisi yoktur çünkü bu az güvenli yöntemdir. Rağmen, bazı "soru" ya da aynı kişi olduğundan emin olmak için ifade iletebilirsiniz. Muhtemelen bir e-posta adresi belirleyerek?

Option 4: Third-party cookies

Ben bu zaten sözü olduğunu düşünüyorum, ama üçüncü bir etki çerezleri ayarlayabilirsiniz, böylece yerine ikisi arasında ileri ve geri "geçiş" daha işlevsel tam olarak aynı iki site.