Birini başlatmadan PHP oturum denetleniyor?

3 Cevap php

Bu bir başlangıç ​​dışarı bir oturum için kontrol etmek mümkün mü?

Ben isimli sormak nedeni, ben geliştiriyorum uygulaması entegre bir yönetici arayüzü var. Bir yönetici olarak oturum Yani onların düzenlemeler yapmak için kullanıcıların aynı sayfalarını taramak. Alanlar ve seçenekleri kullanıcıların privs dayalı gösterilir.

Bu iki sorun neden oluyor.

Bir oturumu başladı ediliyor Çünkü One, ben gönderilen başlıkları olarak tarayıcı önbelleğe alma özellikleri etkinleştirmek olamaz her zaman:

Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0

Ben çıktı şablonları smarty kullanıyorum ve uygulamak edemez:

$smarty->cache_modified_check = true;

Bir oturumu zaten başlatılmış çünkü değiştirilmiş değil 304 gönderebilirsiniz. Yukarıdaki smarty param kullanarak benim için tarayıcı önbelleği için mükemmel bir çözüm olacaktır.

Siteyi kullanarak her kişi oturum dizini gereksiz oturumları ile doldurulur bir oturum başlıyor çünkü Two olduğunu.

Kullanıcı giriş değilse ben sadece oturumu yok, ama sonra her sayfa yükleme, kullanıcı oluşturma ve bir oturumu silme olacaktır. Bu kötü bir uygulama mı?

Ben sadece aktif bir oturumda tüm sorunlar çözüldü olacak birini başlatmadan olup olmadığını görmek için kontrol edebilir eğer öyleyse. Herhangi bir fikir? Sayfayı isteğinde tarayıcı oturum tanımlama göndermek değil mi?

Something Ideally like this:

if (session_exists) {
 session_start();
 $users->priv = $_SESSION['priv'];
}
else {
 $users->priv = guest;
}

--------------- In response to Tony Miller ---------------

Session_id () kullanırken, zaten bir id dönmek için bir oturum başladı olması gerekir.

session_start();
echo session_id($_SESSION);

veya oturum başlangıç ​​çağırmadan önce oturumu için bir id ayarlayabilirsiniz

session_id("adfasdf");
session_start();
echo session_id($_SESSION);

//prints "adfasdf"

Neither of these help me. Unless I am missing something.

3 Cevap

Sen session_id() , hiçbir oturum tanımlı ise boş bir dize döndürür isteyen olurdum.

Belgeleri yok oturumu başladı eğer boş bir dize ("şey" değil) döndürülür olduğunu gösterir.

2014 yorum (Ben 2009 yılında bu cevap yazdı) gösterdiği gibi, session_start() tarafından yakalandı olabilir içinde depolanan bir oturum kimliği ile bir çerez varsa bir oturum başlatmak ihtimali vardır.

PHP 5.4.0 itibariyle, biz şimdi session_status() var ama bu 2009 yılında yoktu.

PHPSESSID çerez ayarlanmış olup olmadığını kontrol edebilir (PHPSESSID isim kontrol, sunucu ayarlarına bağlı olarak, başka bir isim olabilir ini.session.name).

Eğer korku tüm oturum dir poluting Ama eğer, sen onları daha hızlı yok yapmak session.gc_probability, session.gc_divisor ve session.gc_maxlifetime ayarlayabilirsiniz.

İşte bir oturum bunu başlamadan önce varolup olmadığını denetliyor sormak ne yapacak fonksiyonu bulunuyor:

function sessionExists() {
    return (isset($_COOKIE[session_name()]));
}

Bunu oluşturduğunuz aynı isteği bunun için test etmek istiyorsanız, yerine bunu yapabilirsiniz:

function sessionExists() {
    return (isset($_SESSION) || isset($_COOKIE[session_name()]));
}