AJAX istekleri oturum zaman aşımı ile nasıl başa çıkılır?

6 Cevap php

Ben (Um. .. <---- doğru oraya bak) AJAX kullanmak oylama sistemlerine aşina eminim

Benzer bir şey var ve aşağı yukarı ya da oy zaman votes.php gelen yeni değer istemek için AJAX kullanır. Sorun böylece bir kişi sadece bir kez oy kullanabilirsiniz kimliği almak için bir oturumu kullanıyorum olmasıdır. Bu kadar oturumu artık bir saat için sayfa üzerinde oturmak ve ardından oy verirseniz ne olur? Ne bu durumu ele iyi bir yol olurdu? Ben giriş ekranına kendi sayfasını yönlendirmelidir? Eğer öyleyse, ben nasıl yapabilirim ki AJAX isteği ile başvurulan ediliyor votes.php sayfa? Ben bu durumu ele iyi bir yol bakan muyum? Herhangi bir tavsiye yararlı olacaktır.

6 Cevap

401 bir http durumunu ve nedenini ayrıntılı bir JSON nesnesi dönen düşünün. JQuery kullanıyorsanız, bu size daha sonra nesneyi ayrıştırmak error() geri arama, seni bırakayım.

$.ajax({
  data: {},
  dataType: 'html',
  success: function(data) {
    // do whatever here
  },
  type: 'POST',
  url: 'myserver.com',
  error: function(XMLHttpRequest, textStatus, errorThrown) {
    // XMLHttpRequest.responseText has your json string
    // XMLHttpRequest.status has the 401 status code
    if (XMLHttpRequest.status === 401) {
      location.href = 'login.php';
    }
  }
});

Artık PHP ile aşina değilim, ama bu sadece herhangi bir ortamda için çalışması gerekir. Sen may rağmen herhangi bir otomatik giriş formu yönlendirmeyi bastırmak zorunda. Asp.net MVC framework 401 göreceksiniz ve 200 durumu ile geri varsayılan giriş formunu itin.

Sadece oturumda kullanıcıların kimliğine bir link saklamak gerekir. x gibi bir kullanıcıyı tanımlamak ve sonra veritabanındaki kullanıcı x 's bilgi almak için oturumları kullanın.

Lütfen sorun, kullanıcıların seans zamanlama ile ise, o size oturumları kullanarak konum nasıl yeniden gözden geçirilmesi gerektiğini. Tarayıcı kapanana kadar belki son bunları yapmak? Eğer gerçekten onları bir süreye yapmak istiyorsanız, o zaman belki de hayatta oturumu tutmak için aralıklarla sunucuya ping.

Kullanıcı oy gerekir olsun veya olmasın php komut karar verin. Oturumu ayarlamak, ya da zaten oy verdiniz varsa, istemci tarafında belirleyebilir bir mesaj döndürür değilse. Onlar belki de zaten bir JSON nesne "voted":"true" return olarak eğer. Bu nesneyi ayrıştırmak ve ne anlama geldiğini anlamak, uygun eylemi alarak JS kullanın. Oturum ayarlanmış değilse, belki "session_set":"false" dönmek ve sonra javascript bir window.location = "login.php" vb ile yönlendirme yapmak

Sadece sayılan oyların başarılı bir dönüş kullanıcı için sayacı artırmak.

This is an old thread, but I wanted to share my solution that is working really well. In my framework the system redirects the user to the login form any time they try to access a page and the session has timed out or is not valid. I added to the top of the login form the following html comment:

<!--LOGINFORM-->

Ben her istek üzerine bu dize için denetler JQuery'nin $. Ajax fonksiyonu için bir sarıcı yarattı, ve eğer varsa onların oturum zaman aşımına uğradı söyleyerek bir iletişim açılan gösterir.

Sadece arayarak bu kullanabilirsiniz:

ajax.get('http://someurl.com', function(data){
//Do stuff
});

Birine yardımcı olur umarım.

var ajax = {
    check_login : function(resp){
    if (resp.substring(0, 16) === "<!--LOGINFORM-->"){
                // Show a popup or redirect them to login page!
                return true;
    }
    return false;
},
get : function(url, success){

    if (typeof data =='undefined'){
        data = null;
    }

    $.ajax({
        url: url,
        type : 'GET',
        success : function(resp){
            if (!ajax.check_login(resp)) {
                success(resp);
            }
        },
    });
}   

};

Siz "demek için Ajax isteği (örneğin oyların sayımını olarak, -1 burada bir >=0 numara normal olacağını, diyelim ki) özel bir sonuç kabul kolaylaştırır Javascript kodu yapısı bub dilerim, zaman aşımına uğradı "ve (isteğe bağlı bir parametre aşımına kullanıcı, & c açıklayan bir mesaj olarak alabilir) yeniden giriş sayfasına yönlendirmek demektir.

Sen gibi bir şey aracılığıyla sunucuyu her 10 dakikada bir ping olabilecek bir javascript işlevi oluşturabilirsiniz

setTimeout("Ping()", 60000);

Eğer onlar hatalı oturumu ile bağlarsanız giriş sayfasına kullanıcı gezinmek istiyorsanız o zaman ilk oturumu doğrulamak olacaktır ve eğer başarısız bir gönderme

header("Location: ...");

http://ca2.php.net/manual/en/function.header.php

Bir kullanıcı açısından bakıldığında, en iyi çözüm "Girmen ya da oturum zaman aşımına uğradı değildir" gibi bir şey söyleyerek bir mesaj ve giriş formu açılır etmektir. Digg Bu çok iyi yapar.

Gerçek AJAX uygulaması için, SWilliams '401 öneri sağlam. Alternatif olarak, sadece başarısızlık belirli bir dize dönebilirsiniz.