Zoque.Forum
Dirsek Teması:
Geri Dön Zoque.Forum » Webmaster Kaynaklari » Sunucu Tabanlı Programlama (Server Side) » PHP » php_session


Yanıt
 
LinkBack Seçenekler
Old 29.12.2000   #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 )
armystique şu an çevrimdışı  
Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!Spurl'e kaydet! http://reddit.com/submit?url=%url%&title=%title%Wong'e kaydet!Yahoo'ya kaydet!Google'a kaydet!MSN'e kaydet!Facebook'e kaydet!
Mesajdan alıntı yaparak yeni bir cevap ekleyin
Old 29.12.2000   #2 (permalink)
 
stalker's Avatar
 
Ü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
stalker şu an çevrimdışı  
Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!Spurl'e kaydet! http://reddit.com/submit?url=%url%&title=%title%Wong'e kaydet!Yahoo'ya kaydet!Google'a kaydet!MSN'e kaydet!Facebook'e kaydet!
Mesajdan alıntı yaparak yeni bir cevap ekleyin
Old 29.12.2000   #3 (permalink)
 
Üyelik Tarihi: 16.08.2000
Yer: Istanbul - TR
Yaş: 26
Mesaj: 77
gönderirsen sevinirim. armagan@technologist.com

peki session_id niye kullanılır?
armystique şu an çevrimdışı  
Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!Spurl'e kaydet! http://reddit.com/submit?url=%url%&title=%title%Wong'e kaydet!Yahoo'ya kaydet!Google'a kaydet!MSN'e kaydet!Facebook'e kaydet!
Mesajdan alıntı yaparak yeni bir cevap ekleyin
Old 29.12.2000   #4 (permalink)
 
lemi's Avatar
 
Ü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
lemi şu an çevrimdışı  
Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!Spurl'e kaydet! http://reddit.com/submit?url=%url%&title=%title%Wong'e kaydet!Yahoo'ya kaydet!Google'a kaydet!MSN'e kaydet!Facebook'e kaydet!
Mesajdan alıntı yaparak yeni bir cevap ekleyin
Old 30.12.2000   #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

armystique şu an çevrimdışı  
Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!Spurl'e kaydet! http://reddit.com/submit?url=%url%&title=%title%Wong'e kaydet!Yahoo'ya kaydet!Google'a kaydet!MSN'e kaydet!Facebook'e kaydet!
Mesajdan alıntı yaparak yeni bir cevap ekleyin
Old 31.12.2000   #6 (permalink)
 
stalker's Avatar
 
Ü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
stalker şu an çevrimdışı  
Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!Spurl'e kaydet! http://reddit.com/submit?url=%url%&title=%title%Wong'e kaydet!Yahoo'ya kaydet!Google'a kaydet!MSN'e kaydet!Facebook'e kaydet!
Mesajdan alıntı yaparak yeni bir cevap ekleyin
Old 31.12.2000   #7 (permalink)
 
stalker's Avatar
 
Ü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
stalker şu an çevrimdışı  
Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!Spurl'e kaydet! http://reddit.com/submit?url=%url%&title=%title%Wong'e kaydet!Yahoo'ya kaydet!Google'a kaydet!MSN'e kaydet!Facebook'e kaydet!
Mesajdan alıntı yaparak yeni bir cevap ekleyin
Old 31.12.2000   #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 ?
armystique şu an çevrimdışı  
Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!Spurl'e kaydet! http://reddit.com/submit?url=%url%&title=%title%Wong'e kaydet!Yahoo'ya kaydet!Google'a kaydet!MSN'e kaydet!Facebook'e kaydet!
Mesajdan alıntı yaparak yeni bir cevap ekleyin
Old 31.12.2000   #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 ?


armystique şu an çevrimdışı  
Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!Spurl'e kaydet! http://reddit.com/submit?url=%url%&title=%title%Wong'e kaydet!Yahoo'ya kaydet!Google'a kaydet!MSN'e kaydet!Facebook'e kaydet!
Mesajdan alıntı yaparak yeni bir cevap ekleyin
Old 01.01.2001   #10 (permalink)
 
stalker's Avatar
 
Ü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
stalker şu an çevrimdışı  
Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!Spurl'e kaydet! http://reddit.com/submit?url=%url%&title=%title%Wong'e kaydet!Yahoo'ya kaydet!Google'a kaydet!MSN'e kaydet!Facebook'e kaydet!
Mesajdan alıntı yaparak yeni bir cevap ekleyin
Sponsorlu Bağlantılar
Zoque.Forum
Reklam
Yanıt

Etiketler

php_session


 
Zoque'a hoşgeldiniz!
Zoque 27.02.1999 tarihinde yayın hayatına başlamış, paylaşıma dayalı bir oluşumdur. Tasarım, teknoloji, web, kültür ve sanat ana başlıkları altında bilgi paylaşımı ve benzer değerlere sahip katılımcıların birbirleriyle iletişime girmelerine imkan sağlar. "Az ama Öz" sloganından yola çıkarak, kaliteli ve nitelikli katılımı temel alır.

Saygın ve ciddi bir ortamda yardımlaşmak, haberleşmek, kendi bildiklerini diğer katılımcılarla paylaşmak isteyen, oluşumumuza düzenli katılımda bulunacağı inancını taşıyan konuklarımızı üye olmaya davet ediyoruz. [ » ]


Üye Girişi:

En popüler ilk 100 etiket
Tag Cloud
acil adsl ajax almak arama araniyor ariyorum ariyoruz asp bilen bilgi bilgisayar blog calisma canon css div domain dosya eleman film firefox flash font form forum fotograf freelance google gore grafik grafiker hakkinda hangi hata hatasi hosting html ilgili ilk image internet istanbul istiyorum java javascript karakter kayit kisisel kullanimi link logo mac mail menu muzik mysql nasil neden nedir online oyun photoshop php problemi program programi reklam resim satilik sayfa script server ses sistemi site sitesi son soru sorun sorunsali sorunu sql swf tasarim tasarimci tasarimcisi tasarimi turk turkce veri video web windows wordpress xml yardim yazi yeni zoque
Zoque RSS Aboneliği
Son eklenen konuları e-posta ile haber verelim mi?

Forum Yazılımı: vBulletin® Version 3.7.4 Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0

Arayüz/Skin "Güneş" © www.zoque.com / net. Copyright © 1999 - 2008
Forum Saati GMT +2. Şu anda saat: 12:32.