php session sona erdiğinde bir db kilidi açmak?

3 Cevap php

Suppose a user is editing a record from a database, in the schema you have a field named 'lock' so users can not edit concurrently the same record, once the user ends editing you set lock = false to allow other users to edit the record.

My question is, can i run some code when php session ends, so if a user walks away from computer, close the browser or whatever, i can set the lock to false?. Because if not, and correct me if I'm wrong, the record would remain locked?

I've read the session_set_save_handler section from php manual, but i'm not sure that the 'close' callback it's what i need...

Or do I need to add a timestamp in the db schema and run a cronjob to 'unlock' the records every x time?

Teşekkürler!

3 Cevap

Ben çünkü sen, ikinci fıkrada belirtilen nedenlerle, yukarıda açıklandığı gibi bir yaklaşım kullanarak kilitleme uygulamak istemem.

Ne yapacağını tabloda bir zaman damgası sütun sahip olmaktır. Bir girişim bu tabloya yazmak için yapıldığında, onun zaman damgası (bir yerde bir oturum değişkeni, diyelim ki) kaydetti sonra ilk okunması gerekir. Geri satıra güncel bilgi yazmadan önce ben damgası bakmak ve zaman damgası tam olarak gördüm (ve oturumda var not) aynı biri olduğunu sağlayacaktır. Değilse, ben aramıyorum iken (eğer kullanıcı için bir form takdim ederken, bu durumda ve kullanıcı henüz geri sunucuya formu teslim değil) birisi satır güncellenir.

Bu yaklaşım birçok O / RM'ler bir oturum yanlışlıkla başka bir oturumda yapılan değişiklikleri üzerine değil emin olmak için kullanabileceğiniz budur. Bu yaklaşımın ters Eğer oturumu terk edilmiş bir kullanıcı tarafından sol elde bir "kilit" bir şans tüketmemek olduğunu, ve bayat kilitleri açmak için bir cron işi olması gerekmez. Bu yaklaşımın dezavantajı, sadece çarpışma hakkında size DB kayıt güncelleme deneyin an bilemez olmasıdır. Bu kullanıcı zaten veri değişikliklerini içeren bir formu teslim olurdu anlamına gelir, ve sen o / o (o kayıttaki / güncellendi son bilgileri sunmak, diyelim, sonra) tekrar deneyin zorunda olduğu kullanıcıyı bilgilendirmek gerekir.

Ben size tarif kilit zaman damgası ile daha iyi olduğunu düşünüyorum. Oturum kapalı geri çağrılarla sorun dedikleri olsun emin olamaz olmasıdır. Örneğin birisi sizin web sunucusu tükenip, ne olur, ya da daha kötüsü, süreci öldürür. Siz de bu durumlarda DB tutarlılık istiyorum.

Belki de bu bir register_shutdown_function() yapacağını şeydir.