Geçerli sekmeyi algılamak

5 Cevap php

Bir sayfa 2 farklı tarayıcılarda açılmış olup olmadığını tespit etmek mümkün mü?

Ben $ _SESSION bazı verileri depolayan bir küçük uygulama, yerleşik ve sorunun birden çok sekme açıldığında aldığında, oturum vars (arama formu arama filtreleri) üzerine alır ve böylece sekmeler görünüşte için aynı sonuçları gösterebilir olduğunu Farklı arar.

Bu uygulama için kullanılan ana tarayıcı IE, bu yüzden bu sorunu vurmak için bir süre aldı ve uygulaması .. büyük ve değiştirmek zor aldım.

Ben bu arama için tüm başvuruları düzeltmek kadar, ben bir "hızlı ve kirli düzeltme" yapmak ve aynı sayfanın iki sekme açarak inkar etmek ister, ya da en azından bir uyarı görüntülemek istiyorum ..

edit: @arjun: yes, i know, but i have to restore the search filters when the user return to the search page:) so $SESSION is the way to go for this. Also, the filters are sent down by AJAX and it gets hard to debug when you have lots of filters(GET is limited in size, so i use POST)

@ Tomhaigh: thx .. ama bu benim şu anda yapmak ne çalışıyorum, ama bu sekme "şey" tüm app etkiler, ve ben tüm modüllerde filtreleri değiştirmek zorunda çünkü bu bir süre alacaktır ... i şimdi hızlı ve kirli bir şey arıyordu. İpucu: i (ve sonunda olacak) yinelenen sayılar üretebilirsiniz Postadölesan fonksiyonları olarak time () ve rand () kullanmak istemiyorum. Yeni JS) i (PHP ve date.getTime gelen microtime kullanmak "yeniden" ve gerçekten eşsiz bir kimliği oluşturmak için Postadölesan 2 usülü. Ayrıca, i bu alışkanlık çok büyük büyümek böylece zaman 2 saatten daha eski zaman ve temizleme saklanan filtreleri OTURUMU ayrıştırmak için bir fonksiyon yazdım.

@ Gortok: ben biliyorum .. ama bu yüzden birden çok açık sekme dikkate gerek görmedim ... akılda IE6 ile tasarlanmış ve bu app içine oturum açarken kullanıcıları (% 90 gibi bir şey) çoğu hala IE6 kullanmak idi.

5 Cevap

Peki bu asap sabit gereken bir tasarım sorunudur. Birden fazla açılış yapılıyorsa bu olsa başa bir kesinlikle-kirli ve-hızlı yolu $ _SESSION müşterinin IP adresi ($ip=$_SERVER['REMOTE_ADDR'];) Sonra bir uyarı kontrol değil, yeni bir oturum oluşturmak veya görüntülemek saklamak olacaktır Bu adresten. Bu aynı IP adresini paylaşan bir LAN üzerinden ziyaretçiler için sorunlara neden olur. Ben bir şey daha .. hızlı (ya da kirli) düşünemiyorum

Ben arama filtreleri saklamak için $ _SESSION kullanımı kaçınarak tavsiye ve yerine arama sorgu dizesi (yani / search.php? Filtresi1 = val & filter2 = val, vb) onları kodlamak istiyorum. Bu şekilde, her pencere benzersiz bir URL ve başka bir pencere clobbering önler.

Ben Arjun'un cevap katılıyorum ama bunun için oturumları kullanmanız gerekiyorsa, o zaman PHP oturumu içinde her arama için bilgileri içeren bir dizi oluşturabilir.

örneğin form gönderildiğinde, her zaman

$key = md5(rand(time(), 1));
if (!isset($_SESSION['search_filters'])) {
   $_SESSION['search_filters'] = array();
}

$filters = & $_SESSION['search_filters'][$key];

//store stuff
$filters = array( 'something' => true );

o zaman? results.php gibi anahtar = $ tuşuna bir url oluşturmak ve sonra tarafından veri almak

$filters = &$_SESSION['search_filters'][$_GET['key']];
if (!isset($filters)) die('cannot find search');

//do stuff with data
print_r($filters);

Eğer sahip olacak bir sorun kullanıcı tekrar Arjun'un cevap gitmek istiyorum, daha fazla arama yapar gibi oturum daha büyük ve daha büyük olacaktır, ama ben başka bir olası yaklaşım eklemek düşündüm

Temel kullanılabilirlik bir kullanıcı inkar asla.

İki konu görüyorum:

  1. Web uygulamaları için neredeyse bir gerekliliktir şey - Sen kullanıcıya birden fazla sekmede web sayfasını açmak için yeteneği inkar ediyoruz.
  2. Bu sorun, bir tasarım problemini getirir.

Bir singleton için $_SESSION değişkeni değiştirmeyi düşünebilirsiniz, ve birden fazla sayfa görünümleri tarafından üzerine izin vermez isteyebilirsiniz.