Bu php tüm oturumları yok etmek için uygun bir yol var mı?

5 Cevap php

Bu herkes tüm oturumları yok nasıl php.net onu aldım, ama emin değilim mi?

// Unset all Sessions
$_SESSION = array();

if (isset($_COOKIE[session_name()])) {
    setcookie(session_name(), '', time() -42000, '/');
}

    session_destroy();

Kodu tüm oturumları yok edecek mi? Bu en yaygın yolu var mı? siz nasıl php oturumları yok musun?

Oh evet, btw, ne olduğunu session_name()? Tüm oturum adı? örneğin $_SESSION['var1'], $_SESSION['var2'], ...?

Ben kullanmanıza gerek yok unset($_SESSION['var1']); daha fazla değil mi?

Nedir kullanarak arasında farklı session_destroy() ve unset($_SESSION[])?

5 Cevap

İlk seans ne bilmeli: Siz rasgele bir tanımlayıcı, oturum kimliği ile ilişkili sunucu tarafında bir veri konteyner olarak oturumları düşünebilirsiniz. Bu oturum kimliği sunucu $_SESSION değişken içine oturum kimliği ile ilişkili verileri yüklemek (ve dolayısıyla bu oturuma) böylece müşteri tarafından sağlanması gerekir. O $_SESSION değişkene şey de session variables geçerli etkin oturum denir.

Şimdi sorularınız için:

Kodu tüm oturumları yok edecek mi? Bu en yaygın yolu var mı? siz nasıl php oturumları yok musun?

Sağlanan kod sadece geçerli oturumun oturum verileri siler. $_SESSION = array(); Açıklama sadece oturum değişkeni $_SESSION oturum değişkeni bir gelecek erişim $_SESSION başarısız böylece sıfırlanır. Ama oturum konteyner kendisi henüz silinmez. Bu arayarak yapılacaktır session_destroy.

Ayrıca bakınız Truly destroying a PHP Session?

Oh evet, btw, bu oturum_ismi) (nedir? Tüm oturum adı? örneğin $ _SESSION ['var1'], $ _SESSION ['var2'ye'] ...?

session_name sadece bir çerez, URL sorgu veya bir POST parametre üzerinden geçirilen oturum kimliği parametresini tanımlamak için kullanılır. PHP'nin varsayılan değerdir PHPSESSID. Ama sen istersen onu değiştirebilirsiniz.

Ben ($ _SESSION ['var1']) unset kullanmak için ihtiyacım yok; daha fazla değil mi??

Hayır ilk $_SESSION = array();, tüm oturum verileri siler.

Nedir session_destroy ve unset ($ _SESSION []) kullanarak arasındaki farklı?

session_destroy will delete the whole session container while unset veya $_SESSION değişken yalnızca geçerli çalışma zamanı için oturum verileri silecektir sıfırlama.

Bu sadece mevcut kullanıcıların oturumu değil, tüm diğer kullanıcıların oturum yok.

Oturum verilerin saklandığı ediliyor nerede olduğunu bulmak ve daha sonra orada tüm dosyaları silmek için session_save_path () kullanmayı deneyin.

session_name() is the name that's passed in the cookie / querystring. It's normally PHPSESSID ancak değiştirilebilir.

There's no proper way to destroy all sessions. As @Marius says, you could try deleting the session files from session_save_path() but that's a hack at best.

Alternatif session_set_save_handler() gibi bir veritabanı olarak, daha fazla kontrole sahip bir yere oturumları kaydetmek için kullanabilirsiniz.

Tek bir oturumu yok etmek için, aşağıdaki kullanmalısınız: -

session_destroy();

Daha önce bir oturuma devam / başlatmak için () session_start kullandım varsayarsak.

Tüm oturumları imhası gerçekten kurulum bağlıdır ve nasıl oturumları idare ediyorsun.

Çoğu PHP yükler için, oturum yönetimi dosyaları üzerinden yapılır, bu yüzden en iyi yolu (genellikle) (session_save_path bulundu) tüm oturumları tutar klasörü bulmak için olması, ve bunun altında tüm dosyaları silmek istiyorsunuz.

Gerçi bu işlemek için en iyi yolu önceden tutumumuzu oluşturduğunuz her oturumda bir zaman damgası ayarlamak için olabileceğini düşünüyorum. Bu daha sonra (tüm oturumlar geçersiz istediğiniz zaman saati) bir set noktasına o zaman damgası karşılaştırmak ve o zaman önce eğer oturumu geçersiz anlamına gelir. Bu da vs vs bir oturum için belirlenen belirli bir zaman aşımı gibi şeyler yapmak anlamına gelir

Başka bir yol Veritabanı Saklı Sessions kullanmak değiştirmek için olabilir - sen here Bu iyi bir öğretici bulabilirsiniz

ben bu eski bir konu olduğunu biliyorum ... ama ben sadece paylaşmak istedim :)

i yerine oturum için geçici bir klasör kullanarak bir veritabanına kaydetmek öğrendim. Yani teknik olarak, oturumların yönetimi mümkündür.

My Code:

(Daha çok http://www.tonymarston.net/php-mysql/session-handler.html#session.handler ikinci plaigiarised):

mysql:

CREATE TABLE `php_session` (
`session_id` varchar(32) NOT NULL default '',
`user_id` varchar(16) default NULL,
`date_created` datetime NOT NULL default '0000-00-00 00:00:00',
`last_updated` datetime NOT NULL default '0000-00-00 00:00:00',
`session_data` longtext,
PRIMARY KEY  (`session_id`),
KEY `last_updated` (`last_updated`)
)

oturum işleyicisi (i php_session.class.php denilen ayrı bir dosyaya koyun):

<?php

class php_Session
{
    // ****************************************************************************
    // This class saves the PHP session data in a database table.
    // ****************************************************************************

    // ****************************************************************************
    // class constructor
    // ****************************************************************************
    function php_Session ()
    {


    } // php_Session



    // ****************************************************************************
    function open ($save_path, $session_name)
    // open the session.
    {
        // do nothing
        return TRUE;

    } // open

    // ****************************************************************************
    function close ()
    // close the session.
    {
        if (!empty($this->fieldarray)) {
            // perform garbage collection
            $result = $this->gc(ini_get('session.gc_maxlifetime'));
//            $result = ini_set('session.gc_maxlifetime',0);
            return $result;//$result
        } // if

        return FALSE;

    } // close

    // ****************************************************************************
    function read ($session_id)
    // read any data for this session.
    {
//        $fieldarray = $this->_dml_getData("session_id='" .addslashes($session_id) ."'");
        $fieldarray=array();
        $data= mysql_query("select * from php_session where session_id='" .addslashes($session_id) ."'")or die(mysql_error());
        while($row = mysql_fetch_array($data)) $fieldarray[]=$row;
        if (isset($fieldarray[0]['session_data'])) {
            $this->fieldarray = $fieldarray[0];
            $this->fieldarray['session_data'] = '';
            return $fieldarray[0]['session_data'];
        } else {
            return '';  // return an empty string
        } // if

    } // read

    // ****************************************************************************
    function write ($session_id, $session_data)
    // write session data to the database.
    {
        if (!empty($this->fieldarray)) {
            if ($this->fieldarray['session_id'] != $session_id) {
                // user is starting a new session with previous data
                $this->fieldarray = array();
            } // if
        } // if

        if (empty($this->fieldarray)) {
            // create new record
            $a   = $session_id;
            $b = date("Y-m-d H:i:s");
            $c = date("Y-m-d H:i:s");
            $d = addslashes($session_data);
//            $this->_dml_insertRecord($array);
            mysql_query("insert into php_session (session_id,date_created,last_updated,session_data) values ('$a','$b','$c','$d')");
        } else {
            // update existing record
            if (isset($_SESSION['login_id'])) {
                $a  = $_SESSION['login_id'];
            } // if
            $b = date("Y-m-d H:i:s");
            $c = addslashes($session_data);
//            $this->_dml_updateRecord($array, $this->fieldarray);
            mysql_query("update php_session set last_updated='$b',session_data='$c',user_id='$a' where session_id='$session_id'");
            $data= mysql_query("select * from php_session where session id='" .addslashes($session_id) ."'");
            while($row = mysql_fetch_array($data)) $fieldarray[]=$row;
            $this->fieldarray = $fieldarray[0];
        } // if

        return TRUE;

    } // write

    // ****************************************************************************
    function destroy ($session_id)
    // destroy the specified session.
    {
        $fieldarray['session_id'] = $session_id;
        mysql_query("delete from php_session where session_id='$session_id'");

        return TRUE;

    } // destroy

    // ****************************************************************************
    function gc ($max_lifetime)
    // perform garbage collection.
    {
        $real_now = date('Y-m-d H:i:s');
        $dt1 = strtotime("$real_now -$max_lifetime seconds");
        $dt2 = date('Y-m-d H:i:s', $dt1);

//        $count = $this->_dml_deleteSelection("last_updated < '$dt2'");
        mysql_query("delete from php_session where last_updated < '$dt2'");
        $count = mysql_affected_rows();

        return TRUE;

    } // gc

    // ****************************************************************************
    function __destruct ()
    // ensure session data is written out before classes are destroyed
    // (see http://bugs.php.net/bug.php?id=33772 for details)
    {
        @session_write_close();

    } // __destruct

// ****************************************************************************
}
?>

Orada dağınık kod için üzgünüm.

To Use

IMPORTANT :) (session_start çağırmadan önce koymak

require_once 'php_session.class.php';
$session_class = new php_Session;
session_set_save_handler(array(&$session_class, 'open'),
                     array(&$session_class, 'close'),
                     array(&$session_class, 'read'),
                     array(&$session_class, 'write'),
                     array(&$session_class, 'destroy'),
                     array(&$session_class, 'gc'));

sonra session_start aramak () ve bitti!

Onun içinde mysql olduğundan, ($ _SESSION kullanarak kendiniz ayarlanır) kullanıcı kimliği üzerinden online kim görebiliyordu, ve (ne işe kullanarak im şu) onları çıkıyor ve malzeme gibi işlevleri yerine getirir.