PHP Sessions - Kilitleme ve Paylaşım sorular

2 Cevap php

I would like to know if it is possible to read $_SESSION attributes without locking it.
Currently, session_start() locks SESSION, that means other PHP processes will wait until it is unlocked.
But, some processes just want to get some $_SESSION variables, not to write on them.
Is that possible to implement some function like session_get(string $id) which doesn't lock SESSION?

Ayrıca, kullanıcı session_id('shared_vars_of_'.$userid) kullanarak, örneğin, aynı hesaba giriş yapınca, tarayıcılar arasında seans paylaşmak mümkün. Ancak, bu güvenli? Bu cesareti var mı?

Thanks,
Nuno

2 Cevap

İlginç bir soru!

session_write_close() sizin için ne soruyorsun tam olarak değil ama sürecin hızlanmasına yardımcı olur:

Oturum verileri komut () session_write_close aramak gerek kalmadan sonlandırıldı sonra genellikle saklanan, ancak oturum verileri eşzamanlı yazma önlemek için kilitli olarak sadece bir script her zaman bir oturumda üzerinde çalışabilir. Oturumları ile framesets birlikte kullanıldığında nedeniyle bu kilitleme teker teker yükleme çerçeveleri yaşayacaksınız. Size en kısa sürede oturum değişkenleri tüm değişiklikler yapılır gibi oturumu sona tüm kareleri yüklemek için gereken zamanı azaltabilir.

Yalnızca salt okunur erişim ihtiyacı olan bir script), oturumu başlatmak başka bir diziye oturum değişkenleri kopya ve session_write_close (geçerli olabilir. Bu tamamen salt tek çözüm olmayacak - bu o için kendi oturum işleyicisi oluşturmak gerekir ediyorum ki olabilir - ama ileriye doğru büyük bir adım olmalıdır.

Update: Ben sadece bulunan bir interesting issue from 2001 in the PHP 4 tracker sadece okuma oturumları sağlayan bir yama tanıtmak görünüyor ki - bu da, en azından göre değil, resmi bültenleri bunu yapmış görünmüyor belgeleri! Belki daha da kazma veya PHP 5 için bilet açılmasının değer.

Şahsen ben başında bu hakkı yapın:

session_start();
session_write_close();

Ve sonra $ _SESSION salt okunur olarak erişebilirsiniz. Aşağıda görebileceğiniz gibi, you do not need to copy the session variables.

session_start();
//This value will be "The #1 Value!" only the 2nd time you run this
echo "<br />myData value1:".$_SESSION['myData'];
$_SESSION['myData'] = "Value 2 and 3!";
session_write_close();

echo "<br />myData value2 (read-only):".$_SESSION['myData'];
$_SESSION['myData'] = "Value 3 Misleading, and never actually written to the session!";
//But it will affect this value, obviously
echo "<br />myData value3:".$_SESSION['myData'];

session_start();
//NOTE HOW THE ABOVE LINE WRITES-OVER $_SESSION
echo "<br />myData value4:".$_SESSION['myData'];
$_SESSION['myData'] = "The #1 Value!";
session_write_close();