Bir Session PHP oturumlar Anahtarı miyim?

6 Cevap php

Ben birleştirmeye çalışıyorum iki uygulamalar var. Bir benim tarafımdan yazılmış ve başka bir ben kullanıyorum bir CMS dir. Benim kimlik ben kodlu biri olur ve ben bu bilgileri bilmek benim CMS istiyorum. Sorun CMS bir oturumun adını kullanıyor olması, ve benim app başka kullanır. Onları nedeniyle olası ad çatışmalar aynı birini kullanmak yapmak istemiyorum ama ben yine de bu bilgi almak istiyorum.

Bir istek ortasında oturum adları geçmek mümkün mü? Örneğin, CMS böyle bir şey yapıyor:

//session_start already called by cms by here

$oldSession = session_name();
session_name("SESSION_NAME_OF_MY_APP");
session_start();

//get values needed
session_name($oldSession);
session_start();

Olur bu iş böyle bir şey? Böyle bir şey session_start sonra çalışmak istiyorum Eğer dokümanlar veya web üzerinde bir şey bulamıyorum () adı olmuştur. İpuçları?

Bu çözümü barikat, ben sadece bilgi almak için bir Web hizmeti gelişmekte düşünüyor oldum, ama bu bilgi zaten mevcut olduğu gibi tabii ki sadece oturumdan bunu almak tercih olacaktır.

Teşekkürler!

6 Cevap

İşte oturumlar arasında geçiş nasıl bir çalışma örneği:

session_id('my1session');
session_start();
echo ini_get('session.name').'<br>';
echo '------------------------<br>';
$_SESSION['value'] = 'Hello world!';
echo session_id().'<br>';
echo $_SESSION['value'].'<br>';
session_write_close();
session_id('my2session');
session_start();
$_SESSION['value'] = 'Buy world!';
echo '------------------------<br>';
echo session_id().'<br>';
echo $_SESSION['value'].'<br>';
session_write_close();
session_id('my1session');
session_start();
echo '------------------------<br>';
echo $_SESSION['value'];

Log gibi görünecektir:


PHPSESSID
------------------------
my1session
Hello world!
------------------------
my2session
Buy world!
------------------------
Hello world!

Yani, gördüğünüz gibi, oturum değişkenleri kaydedilir ve oturumu değiştirirken restore.

Note: the answer below is not correct, please don't use or vote up. I've left it here as a place for discussion

Sen çözüm elle session_name() aksi sessizce başarısız herhangi bir çağrı önce önceki oturumu kapatmak zorunda dışında, (ben hiç böyle bir şey denedim değil) çalışması gerekir.

Sen böyle bir şey deneyebilirsiniz:

session_write_close();
$oldsession = session_name("MY_OTHER_APP_SESSION");
session_start();

$varIneed = $_SESSION['var-I-need'];
session_write_close();
session_name($oldsession);
session_start;

Session ID değeri ile aslında karışıklık gerek yok ya da PHP oturum kimliği manipülasyon rutinleri aracılığıyla ya da manuel çerez bozma yoluyla, var - PHP, tüm o kendisi ilgilenir ve bu karışıklık olmamalıdır.

Sen session_id, sen session id (veya adı) almak / ayarlamak için kullanabilirsiniz kullanmalısınız.

Peki yerine (sizin sahte kodda) session_name kullanarak, session_id kullanın.

session_regenerate _id()

Manuel oldukça iyi bu açıklar ama burada bazı örnek manuel bulunuyor

session_start();

$old_sessionid = session_id();

session_regenerate_id();

$new_sessionid = session_id();

echo "Old Session: $old_sessionid<br />";
echo "New Session: $new_sessionid<br />";

print_r($_SESSION);

Zend_Session oturumları için Namespacing sunuyor.

Zend_Session_Namespace instances are accessor objects for namespaced slices of $_SESSION. The Zend_Session component wraps the existing PHP ext/session with an administration and management interface, as well as providing an API for Zend_Session_Namespace to persist session namespaces. Zend_Session_Namespace provides a standardized, object-oriented interface for working with namespaces persisted inside PHP's standard session mechanism. Support exists for both anonymous and authenticated (e.g., "login") session namespaces.

Mümkündür. Ama kendinizi ele oturumu yapmak zorunda düşünüyorum:

session_name('foo');
// start first session
session_start();

// …

// close first session
session_write_close();

session_name('bar');
// obtain session id for the second session
if (ini_get('session.use_cookies') && isset($_COOKIE[session_name()])) {
    session_id($_COOKIE[session_naem()]);
} else if (ini_get('session.use_trans_sid') && !ini_get('session.use_only_cookies') && isset($_REQUEST[session_name()])) {
    session_id($_REQUEST[session_naem()]);
}
// start second session
session_start();

// …

Ama siz de çerez ayarı gibi diğer oturum yönetimi bazı şeyleri olabileceğini unutmayın. PHP bu durumda bu da yaparsa ben bilmiyorum.