2009-12-25 32 views
10

Bir kullanıcı oturum açtığımda, onun kimliğini alıyorum ve bir oturum değişkenine kaydediyorum. Merak ettiğim şey, bu yol mu? Yoksa çerezleri kullanmalı mıyım? bu yüzden otomatik olarak giriş yapın ve devam edin.Çerezler/Oturumlar giriş sistemi

session_start(); 


ifcorrectlogin { 
$_SESSION['id'] = mysql_result($loginQuery, 0, 'user_id'); 
} 

Kullanıcılarınızı nasıl doğrularsınız?

// Çaylak

+0

Welcome yapmamaya nasıl anlamak eğer

, sen, kendin kesinlikle OTOH yapmalıdır. Büyük ilk soru! – Sampson

+1

teşekkürler! Daha fazla soru için hazır olun, P – Erkka

cevap

1

Çerezler çok kolay manipüle edilebilir. Oturumlar ile oturum açmayı/oturumu kapat. İsterseniz, kullanıcılara bir çerezde emailaddress/username kaydedebilir ve mevcut oturumun süresi dolduğunda bir sonraki ziyaretlerinde kullanıcı adı kutusunu doldurabilirsiniz.

+0

İlk cümlede biraz çelişkilidir. PHP bir çerez yardımıyla oturumu korur. Sadece çerez değerinin yeterince güçlü olduğundan emin olun. – BalusC

+0

Balus, Sanırım cevabımın biraz kafa karıştırıcı olabileceğini düşünüyorum. Seninkini okuduktan sonra, aynı çözümü sunduğumuza benziyor. – Sampson

1

Bir oturum motoru bulmaya çalışacağım, böylece yanlış anlaşmayla uğraşmak zorunda kalmayacaksın. En ufak bir şeyi yanlış yaparsan seni götüne sokan güvenlik sorunları. Yerleşik bir oturum motoru olan django'yu kullanıyorum. Alandaki diğer tekliflerin farkında olmamasına rağmen, çoğu çerçevenin bir tane olacağını düşünürdüm.

Django'da yaptıkları gibi, kullanıcının kurcalama ve güvenlik sorunlarını önlemek için, her sayfanın görünümünü güncelleyen ve diğer tüm oturum bilgilerini sunucunuzdaki bir veritabanında saklayan, kullanıcının çerezlerine bir şifreleme karması yerleştirmekti.

5

Evet, işte bu yol. Seansın kendisi, size bunun etrafında herhangi bir programlama çalışması yapmak için bir çerez tarafından desteklenmektedir. Oturum (aslında, çerez), kullanıcının tarayıcı örneğini açık olduğu sürece veya kullanıcı, siteyi belirli bir süre (genellikle yaklaşık 30 dakika) ziyaret etmediği için sunucu tarafında oturum zamanına kadar sürece yaşayacaktır.

Oturum açmada, $_SESSION numaralı telefona User kodunu ekleyin. Kısıtlanmış sayfalardaki her istekte, User'un oturum açıp açmadığını $_SESSION'da kontrol edip isteğinizi yerine getirip getirmediğini kontrol edin, yani devam edin veya bir giriş veya hata sayfasına yönlendirin. Oturum kapandığında, User'u $_SESSION'dan kaldırmanız yeterlidir.

Eklemek istiyorsanız, bu bilgisayarda seçeneğini hatırla, o zaman oturumdan daha uzun yaşayan başka bir çerez eklemeniz gerekecek. Çerez için uzun, benzersiz ve tahmin edilmesi zor bir değer oluşturduğunuzdan emin olmanız yeterlidir, aksi takdirde kesmek çok kolaydır. PHP'nin, web tarayıcınızda phpsessionid adıyla çerezleri kontrol ederek nasıl yaptığına bakın.

+0

Eğer bir kullanıcı "hatırlanmış" olmak istiyorsa, bir çerezde ve db'de benzersiz bir dizgi saklamalıyım ve kullanıcı tekrar ziyaret ettiğinde, çerezin var olup olmadığını kontrol etsem ve eğer varsa db biri? – Erkka

+1

Neredeyse iyi. Bir ** giriş yapmamış ** kullanıcı ziyaret ettiğinde, ilgili "Kullanıcı" için DB'yi kontrol edin ve daha sonra "otomatik olarak" giriş yapın. Tam olarak bunu içeren bir yanıt gönderdim, yararlı bulabilirsin ayrıca: http://stackoverflow.com/questions/1877242/keep-user-logged-in-when-he-visit-the-same-page-again/1877304#1877304 – BalusC

0

BalusC'den bahsedildiği gibi, php'de session_ -işlevleri giderken, temel fikriniz ses verir. Ama yine de birçok farklı gerçekleştirmeler var, bazılarının tuzakları var. Örneğin, Jonathan Samson açıklamasında, tanımlama bilgilerinin kullanılması güvenlik açıklarına neden olabilir.

PHP'm biraz paslı, ancak session_ -funksiyonlarının URL'lerde kodlanmış oturum kimliklerini de kullanabileceğini hatırlıyorum. (Ayrıca, tüm yerel bağlantılara (GET olarak) ve form hedeflerine (POST olarak) otomatik olarak eklenmesi için bir seçenek de vardı. Ancak bu riskler de yoktu.) SID'yi kopyalayarak oturumları ele geçirmeyi önlemenin bir yolu: IP adresini hatırlamak ve bu isteği gönderen IP'ye geçerli bir oturum kimliğiyle gelen herhangi bir istek için karşılaştırmak.

Gördüğünüz gibi, temel yöntem sadece başlangıçtır, dikkate alınması gereken daha çok şey vardır.Bu nedenle, SapphireSun tarafından yapılan öneri, dikkate alınması gereken bir husustur: İyi test edilmiş bir kütüphane kullanarak, kendi oturum sisteminizi geliştirmek için değerli geliştirme süresi kullanmadan, iyi bir güvenlik seviyesi elde edebilirsiniz. Bu yaklaşımı, gerçek dünyada dağıtmak istediğiniz herhangi bir sistem için öneriyorum. PHP oturumları ve güvenlik sorunları hakkında bilgi edinmek istiyorsanız sadece StackOverflow o ;-)