|
|
#1 (permalink) |
|
Üyelik Tarihi: 16.08.2000
Yer: Istanbul - TR
Yaş: 26
Mesaj: 77
|
PHP'de (Aslında genel olarak) Session olayı hakkında bilgi almak istiyorum... Şimdi ilk olarak ben kendi bildiklerimi anlatayım... Ben daha önce ASP'de session yöntemini kullandım. fakat Session id olayını hiç kullanmadım. Hatta kullandığım şekli kısaca size şöyle özetleyeyim ASP'de ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ::: LOgin SAyfASI ::: <% session.timeout=80 ... form bilgileri ... ... Set dbcon = connect() Set rs_db = dbcon.Execute("select * from users where username = '" & request.form("uname") & "' and pass = '" & Request.form("pass") & "'") If rs_db.BOF And rs_db.EOF Then Response.Write "<br><br> <font class=login>Incorrect Username or Password.</font><br><br> <a class=login href=JavaScript:history.back(-1)>..:: Back ::..</a>" Else session("sifre") = true session("uid") = rs_db("userid") response.redirect("user.ASP") End If %> ::: PrOTECTIOn KOnULCAK DİgEr SAyfALAr ::: <% if (session("sifre") = false) then response.redirect("user_login.ASP") end if %> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Şimdi PHP'de ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ::: LOgin SAyfASI ::: $loginid = "army"; $password = "123" session_start(); session_register('loginid'); session_register('password'); ::: PrOTECTIOn KOnULCAK DİgEr SAyfALAr ::: session_start(); echo $loginid.",".$password; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ gibi... hemen hemen aynı yani yöntem. Şimdi benim sormak istediğim session timeout olayı. bu süre bildiğim kadarıyla default 20dk. Session id'de bildiğim kadarıyla kullanıcı login olduğunda random olarak bir no üretiliyor. ds564sd4sd165s1a651sd564ads51s65das65d1 gibi bu numara db'de geçici olarak saklanıyor userid | sessid 123 | ds564sd4sd165s1a651sd564ads51s65das65d1 ... gibi ve bu numara QueryString ile tüm sayfalara aktarılıyor http://armystique/deneme/?page=accou...0a728a157cba8c gibi... böylece session timeout olayı çözülmüş oluyor. Ben kısa sürecek authorizing işlemlerinde sessionid kullanmadan yukarıdaki yöntemle sorunu çözüyordum. Ama şu anda çok büyük bir platform sitesi yapıyorum illa session id kullanmalı mıyım? Session olayı ile ilgili detaylı bilgi verecek arkadaşlara şimdiden teşekkürler. (Biker özellikle sen ) |
|
|
|
|
|
#2 (permalink) |
|
Üyelik Tarihi: 01.11.2000
Yer: İstanbul
Yaş: 27
Mesaj: 713
|
Session
Senin istediğin session ile auth işlemi herhalde. Bunu da Query_string'i kullanmadan yapmak istiyorsun önce istediğimiz kodları yazalım:
<? /* Login Bölümü kullanıcıdan gelen form değerlerini username ve password olarak varsayıyoruz */ session_start(); /*Kullanıcının girdiği değerleri kontrol ediyoruz örnek olarak bir veritabanından */ $check_info = "select * from commerce where username = '$username' and password = PASSWORD('$password')"; $get_it = mysql_query($check_info); if(mysql_num_rows($get_it) < 1) { echo "Kullanıcı adı veya şifre yanlış. <br> Lütfen bilgilerinizi bir daha denetleyiniz"; exit; } else { $query = "insert into active (uid, username, ipadr, logintime, intime) values "; $query .= " ('$PHPSESSID', 'ziyaretçi', '$ipadr', NOW(''), $zaman)"; if(mysql_query($query)) { $login = $username; $pass = $password; session_unregister("login"); session_unregister("pass"); session_register("login"); session_register("pass"); echo "Giriş yaptınız"; }else{ echo "HAta oldu"; } } ?> <? /* Login kontrol ediyoruz ya her seferinde veritabanını kontrolü yapıyoruz ya da çerez kullanır gibi username işaretçisinin değerini takip ediyoruz */ session_start(); if($login == "" || $pass == "" || $login == "noone" || $pass = "nopass") { #if döngüsünün gereğinden fazla uzun olduğunun #farkındayım header("Location: uyedegil.PHP"); }else{ #üyelik onaylandı echo "Merhaba üye!"; } ?> <? /* Logout bölümü */ session_start(); session_unregister("login"); session_unregister("pass"); $login = ""; $pass = ""; session_register("login"); session_register("pass"); include("classes/base.class.PHP"); /* Veritabanı bağlantısı */ $conn = new Main; $conn->pconnect(); $query = "delete from active where uid = '$PHPSESSID'"; if(mysql_query($query)) { header("location: index.PHP"); } Bundan başka isteyenlere bu yazdığımın biraz daha kapsamlı bir biçimi olan session_managment sistemciğini memnuniyet ile verebilirim.
__________________
life is better without braces |
|
|
|
|
|
#4 (permalink) |
|
Üyelik Tarihi: 25.04.2000
Yer: İstanbul - Beşiktaş
Yaş: 42
Mesaj: 661
|
banada banadaaa..
sen iyisi tum kodu buraya gec istersen.. iyi calismalar.
__________________
Parmakların'dan önce beynini çalıştır! :: web.pheus.net |
|
|
|
|
|
#5 (permalink) |
|
Üyelik Tarihi: 16.08.2000
Yer: Istanbul - TR
Yaş: 26
Mesaj: 77
|
Aklıma bişi daha takıldı
Şİmdi protect edilmiş bi sayfamız var diyelim
adı deneme.PHP. kodu ; <? session_start(); if($login == ""){ header("Location: uyedegil.PHP"); }else{ #üyelik onaylandı echo "Merhaba üye!"; } ?> Şimdi bu sayfaya login olmadan direct urlye deneme.PHP?login=ssdasa yazarakta girebiliyoruz Bunun bi çözümü yoktur herhalde |
|
|
|
|
|
#6 (permalink) |
|
Üyelik Tarihi: 01.11.2000
Yer: İstanbul
Yaş: 27
Mesaj: 713
|
Cozum
<?
/*check_login.PHP"/ session_start(); $check_query = "select * from active where uid = '$PHPSESSID'"; $check_result = mysql_query($check_query); if(!mysql_num_rows($check_result) { header("Location: unsecure.phtml"); }else{ echo "Hoşgeldiniz"; } ?> Bu şekilde kullanıcı daha önce doğru şifre ile login olmamışsa kesinlikle istenilen sayfaya ulaşamaz. Senin istediğn de buydu sanırım. Ama senin kodunda da şu şekilde bir değişiklik yaparak: if($login == "" || $login == "noone") { header("Location: unsecure.phtml"); }else{ ... denilerek ve yanlış loginlerde.. session_unregister("login"); $login = "noone"; session_register("login"); kodunu kullanarak sorunu çözebiliriz.
__________________
life is better without braces |
|
|
|
|
|
#7 (permalink) |
|
Üyelik Tarihi: 01.11.2000
Yer: İstanbul
Yaş: 27
Mesaj: 713
|
Session_id
1- Altta ki kodda 4. satırda bir ")" eksik.
2- Session id konusunda gelince: Session id siteye ulaşan ve bir oturum başlatan herkesi tanımlayabilmek için kullanılır. Session id ler PHP tarafından belirlenir, ve mutlaka Unique(tekil) dir Yani kesinlikle bir kez verilen session_id ikinci kez verilmez. Ayrıca otamatik olarak atanan session_id lere $PHPSESSID ile erişebilir hatta session_id(yeni session_id) fonksiyonu ile kendiniz session_id atayabilirsiniz.
__________________
life is better without braces |
|
|
|
|
|
#8 (permalink) |
|
Üyelik Tarihi: 16.08.2000
Yer: Istanbul - TR
Yaş: 26
Mesaj: 77
|
Şİmdi...
ben bu yöntemi kullanmak istemiyorum. Çünkü kullanıcının "logout" olamadan, browser'ı kapatması halinde "active" tablosundan isimleri silinmeyecek. Bunu şöyle bir yöntemle çözebiliriz herhalde "active" tablosuna "lastop" diye bir "date/time" field açıp her sayfanın başında bu field'ı update ederek (yeni tarihi girerek), yine her sayfanın başına bir kod yazıp "active" tablosunun "lastop" fieldındaki değerleri sorgulayarak en son 20 dakika önce önce işlem yapmış user'ı silerek. Ama bu performans açısından sakat bi durum tabii... Düşünceleriniz ? |
|
|
|
|
|
#9 (permalink) |
|
Üyelik Tarihi: 16.08.2000
Yer: Istanbul - TR
Yaş: 26
Mesaj: 77
|
birde şu var...
if($login == "" || $login == "noone") { header("Location: unsecure.phtml"); }else{ session_unregister("login"); $login = "noone"; session_register("login"); } ... demişşin kullanıcı QueryString kullanarak "login" değişkeninin değerini değiştirebilir. yani sayfaadi?login=1 ... gibi... Düşünceleriniz ? |
|
|
|
|
|
#10 (permalink) |
|
Üyelik Tarihi: 01.11.2000
Yer: İstanbul
Yaş: 27
Mesaj: 713
|
Active
Login in sağlıklı olmasını sağlamak için bir "hash" kullanarak yapabilirsin:
<? function make_hasher($user) { $hash = "hadibakalim"; $hasher = $hash . $user; return md5($hasher); } ?> <? /* checklogin.PHP */ session_start(); if($login == "") { header("location: notmemeber.PHP"); } /* Uid değişkeni üye login olurken session_register("uid") şeklinde belirlenmelidir. $uid = make_hasher($login) gibi */ if($uid != make_hasher($login) ) { header("location: notmemeber.PHP"); } ?> Bu şekilde veritabanının performansını koruyabiliriz. Active tablosunun sağlıklı veriler içermesini sağlamak için: <? function update_lastaccess() { $query = "update active set lastaccess = NOW('') where uid = '$PHPSESSID'"; return mysql_query($query); } function delete_user () { $query = "delete from active where uid = '$PHPSESSID'"; return mysql_query($query); } ?> <? /*session içerisinde ki herhangi bir sayfa */ session_start(); update_lastaccess(); ... ... ... ... register_shutdown_function(delete_user); ?> Bu metod ile üyenin tam olarak ne zaman login ve logout olduğunu saptayabiliriz.
__________________
life is better without braces |
|
|
|
| Sponsorlu Bağlantılar | |
|
Zoque.Forum
Reklam
|
|
Zoque'a hoşgeldiniz!