Oturum PHP zaman aşımı: en iyi uygulamaları

3 Cevap php

session.gc_maxlifetime ve session_cache_expire() arasındaki gerçek fark nedir?

Ben (ilk açıldıktan sonra değil, 15), kullanıcıların oturum 15 sigara aktivitesinin dakika sonra geçersiz olmasını istediğinizi varsayalım. Bunlardan hangisi orada bana yardımcı olacak?

Ben de yapmak session_set_cookie_params(), hangi zaman bir miktar sona erecek kullanıcının çerez ayarlayabilirsiniz biliyorum. Ancak çerez süresi sona eriyor ve sunucu tarafında sona eren gerçek oturum aynı değildir; Bu da çerez doldu oturumu silmek nedir?

Another solution I have though of is simple $_SESSION['last_time'] = time() on every request, and comparing the session to the current time, deleting the session based on that. I was hoping there was a more "built-in" mechanism for handling this though.

Teşekkürler.

3 Cevap

(Varsa) her zaman session_start session.gc_maxlifetime aşıldığında hesaplanır için kullanıldığı, güncelleştirilmiş oturum dosyaları damgası alır denir.

Daha da önemlisi session.gc_maxlifetime süre aşıldıktan sonra sona erecek bir oturumda bağlı olamaz.

PHP geçerli oturum yüklendikten sonra ve session.gc_probability ve session.gc_divisor çöp toplama aday olacağını olasılığını hesaplar kullanarak doldu oturumları çöp toplama çalışır. Varsayılan olarak onun% 1 olasılık.

Eğer ziyaretçi sayısının düşük varsa inaktif bir kullanıcı sona ermiş olmalı ve silinmiş bir oturuma erişebilir bir olasılık var. Bu sizin için önemli ise, oturumda bir zaman damgası depolamak ve bir kullanıcı etkin olmuştur nasıl oturum hesaplamak gerekir.

Bu örnek, session_start değiştirir ve bir zaman aşımı zorlar:

function my_session_start($timeout = 1440) {
    ini_set('session.gc_maxlifetime', $timeout);
    session_start();

    if (isset($_SESSION['timeout_idle']) && $_SESSION['timeout_idle'] < time()) {
        session_destroy();
        session_start();
        session_regenerate_id();
        $_SESSION = array();
    }

    $_SESSION['timeout_idle'] = time() + $timeout;
}

I spent some time looking for a good answer to how the php.ini server settings make sessions expire. I found a lot of info but it took a while to figure out why the settings work the way they do. If you're like me, this might be helpful to you:

Sessions are stored as cookies (files on the client's pc) or server side as files on the server. Both methods have advantages and disadvantages.

Sunucuda depolanan oturumları için, üç değişken kullanılmıştır.

session.gc_probability session.gc_divisor session.gc_maxlifetime

(session.gc_probability/session.gc_divisor) produces the probability that the garbage collection routine will run. When the garbage collector runs, it checks for session files that haven't been accessed for at least session.gc_maxlifetime and deletes them.

This is all explained pretty well in forum posts (this one especially!) - But the following questions do come up:

1..) Nasıl bu olasılık uygulanır? Ne sunucu zar rulo nedir?

A: The server rolls the dice every time session_start() is called during any active session on the server. So this means you should see the garbage collector run roughly once for every 100 times that session_start() is called if you have the default of session.gc_probability = 1 and session.gc_divisor = 100

2..) Ne düşük hacimli sunucular olur?

A: When session_start() is called it FIRST refreshes the session and makes the session values available to you. This updates the time on your session file on the server. It THEN rolls the dice and if it wins (1 out of 100 chance) it calls the garbage collector. The garbage collector then checks all session id files and sees if there are any that are eligible for deletion.

So this means that if you are the only person on the server, your session will never go inactive and it will appear as though changing the settings have no effect. Let's say you change session.gc_maxlifetime to 10 and session.gc_probability to 100. This means there is a 100% chance the garbage collector will run and it will clear out any session files that haven't been accessed in the last 10 seconds.

If you're the only one on the server, your session will not be deleted. You need at least 1 other active session running for yours to go inactive.

So basically, on a low volume server or at a low volume time - it could be MUCH longer than session.gc_maxlifetime before the garbage collector actually runs and the sessions are actually deleted. And without knowing how this works, it may appear completely random to you.

3..) Neden olasılığını kullanabilirim?

A: Performance. On a higher volume server you don't want the garbage collector running on every request of session_start(). It will slow down the server needlessly. So depending on your server volume, you may want to increase or decrease the probability that the garbage collector runs.

I hope that this ties things together for you. If you're like me and you tried session.gc_maxlifetime and it didn't seem to work (because you tried it out on a development server so as not to disturb anyone), then this post hopefully saved you some head scratching.

İyi şanslar!

* Session.gc_maxlifetime * Bir oturum dosyasının değiştirildiği son kez kapalı dayanır. Böylece her zaman bir oturum dosyası değiştirilmiş veya bir session_start () ayrı bir sayfada denir, gc_maxlifetime için geri sayım yeniden başlar ve kullanıcı "oturum" kalır. Bu aradığınız değerdir. Buna erişiminiz varsa php dosyaları, düzenleme veya php.ini içinde) (ini_set ile bu değiştirebilirsiniz

* Session_cache_expire () * yalnızca HTTP başlığını "Expires" denetler. Bu başlık kontrol ne kadar indirilen sayfa içeriği kullanıcının tarayıcı önbelleği kalmak.