PHP oturum çerezi nasıl devre dışı bırakılır?

5 Cevap php

Ben POST kullanarak session id kendimi geçmek istiyorum nerede PHP kodu yazıyorum. Kullanıcı POST döngüsünün dışında aldığında kaybolmak gerekir gibi, oturumu saklamak için çerez istemiyorum.

PHP otomatik olarak kullanılabilir çerez ayarlar. Ben php.ini in session.use_cookies 0'a ayarlayarak bu davranışı değiştirmek mümkündür öğrendim. Ne yazık ki, bu dosyaya erişimi yok ve ben de aynı sunucu üzerinde çalışan diğer komut davranışını kırmak istemem.

PHP script içindeki oturum çerezi devre dışı bırakmak veya geçersiz bir yolu var mı?

Önerilen çözüm benim için işe yaramaz gibi EDIT:, ben oturumu geçersiz olmalıdır bulundu kodu pozisyonlarda = array $ _SESSION () kullanılır.

5 Cevap

Kullan ini_set():

ini_set('session.use_cookies', '0');

Eğer sadece belirli bir zamanda bir oturum zap edebilmek için gerekiyorsa, session_destroy kullanın (). Tamamen oturumu sonlandırmak istiyorsanız, burada düz belgelerin dışında yapıştırılan bir pasajı kopya / bulunuyor:

// Initialize the session.
// If you are using session_name("something"), don't forget it now!
session_start();

// Unset all of the session variables.
$_SESSION = array();

// If it's desired to kill the session, also delete the session cookie.
// Note: This will destroy the session, and not just the session data!
if (isset($_COOKIE[session_name()])) {
    setcookie(session_name(), '', time()-42000, '/');
}

// Finally, destroy the session.
session_destroy();

Ayrıca, aksi takdirde bu kod her istek üzerine denir sağlamak gerekir. Htaccess ayarı bu yüzden tüm komut için geçerli olduğunu koyabilirsiniz.

Örn.

php_value session.use_cookies 0

Ben kurabiye w / bir oturumu yok etmek PHP'nin belgelenmiş yaklaşımı ile sorun yaşıyorsanız.

// If it's desired to kill the session, also delete the session cookie.
// Note: This will destroy the session, and not just the session data!
if (ini_get("session.use_cookies")) {
    $params = session_get_cookie_params();
    setcookie(session_name(), '', time() - 42000,
        $params["path"], $params["domain"],
        $params["secure"], $params["httponly"]
    );
}

Bu benim iki kez ayarlanmış çerez görmeye neden oldu:

Set-Cookie: SESSION_NAME=deleted; expires=Sat, 08-Jan-2011 14:09:10 GMT; path=/; secure
Set-Cookie: SESSION_NAME=1_4f09a3871d483; path=/

Boş başka bir şey ('') için çerez değerini ayarlama, PHP açıklamalarda belirtildiği gibi "silinmiş" bir değer kurtulmak, ancak ikinci çerez seti kalmıştır alır.

Bundan kurtulmak için, ben kod yukarıda önerilen eklemek zorunda:

ini_set('session.use_cookies', '0');

Ben işleme oturumları için kaynakta bakmadım, ama benim tahminim seansları denilen bilmiyor yani setcookie (...), oturumları modülü atlayarak olmasıdır. Silinmiş bir çerez kurmak kadar sonra, varsayılan bir çerez ayardır.

Ben bir mac üzerinde test edildi: Suhosin-Patch (cli) ile PHP 5.3.6 (dahili: 8 Eylül 2011 19:34:00)

Bunu yapmak için yolu kurulum oturumları kendinsin.

Central bölgesindeki tüm diğer dosyalar (Eğer onlardan biri, değil mi? Var) dahil dosyasını içerir, pratik olduğu kadar erken bir şeyler yapmak gerekiyor.

if( !array_key_exists('sessionid', $_POST) ) {
    // recreate the sessionid
    $sessionid = md5(rand().' '.microtime()); // Or something
} else {
    $sessionid = $_POST['sessionid'];

session_id($sessionid);
session_start();

Şimdi sen formu başlatın kısa sürede hatırlamak zorunda, eklemek gerekir:

<input type='hidden' name='sessionid'><?= session_id() ?></input>