php oturum kapatma komut ile sorun

6 Cevap php

Ben php bir acemi değilim, ve ben bir giriş ve çıkış oluşturmak için çalışıyorum. Ama çıkıyor problemleri yaşıyorum. Benim çıkış sadece bu giriş formu çağırır:

<?
session_start();
session_destroy();
?>
<table width="300" border="0" align="center" cellpadding="0" cellspacing="1" bgcolor="#CCCCCC">
<tr>
<form name="form1" method="post" action="checklogin.php">
<td>
<table width="100%" border="0" cellpadding="3" cellspacing="1" bgcolor="#FFFFFF">
<tr>
<td colspan="3"><strong>Member Login </strong></td>
</tr>
<tr>
<td width="78">Username</td>
<td width="6">:</td>
<td width="294"><input name="myusername" type="text" id="myusername"></td>
</tr>
<tr>
<td>Password</td>
<td>:</td>
<td><input name="mypassword" type="text" id="mypassword"></td>
</tr>
<tr>
<td>&nbsp;</td>
<td>&nbsp;</td>
<td><input type="submit" name="Submit" value="Login"></td>
</tr>
</table>
</td>
</form>
</tr>
</table>

My problem is, when I try to press the back button in the browser. Whoever user is using it can still access what is not supposed to be accessed when a user hasn't logged in. Do I need to add a code on the user page? I have this code on the user page:

<? 
session_start();
if(!session_is_registered(myusername)){
header("location:main_login.php");
}
?>

Eğer ben bir komut dosyası, kullanıcı geri düğmesini tıkladığında tekrar kullanıcı adınızı ve şifrenizi girmenizi isteyecektir böylece yapacağını ne tavsiye edebilirsiniz.

6 Cevap

Sen oturumu yok ettik ama kullanıcı hala yetkili olup olmadığını kontrol etmek için, bir onaylanmaz fonksiyonu, session_is_registered() kullanıyorsunuz. Gördüğünüz gibi here, herhangi bir daha bu kullanarak olmamalıdır.

Kullanıcı set, giriş sayfasında yetkili Yerine zaman $_SESSION['user'] = true. Ayrıca kullanıcı hakkında bazı veriler bunu ayarlayabilirsiniz. Örneğin, ben veritabanını kez gelecekte çok sayıda sorgulama önlemek için mümkün olduğunca kullanıcı hakkında çok bilgi kaydetmek istiyorum.

Eğer çıkış komut session_destroy kullandığınızda sonra bu değişken unset olacak. Bu oturumdan kullanıcıdan bir sayfa korumak için, sadece şunlardır gerektiği anlamına gelir:

if(!isset($_SESSION['user'])) header("Location: main_login.php");

Ayrıca Zaten giriş varlık iken onlar, giriş değil böylece kullanıcılar giriş adresinin giriş sayfasını korumak gerekir:

if(isset($_SESSION['user']) && $_GET['action'] !== 'logout') header("Location: index.php")

Bu kullanıcı giriş veya çıkış için çalışıyor olup olmadığını belirlemek için giriş sayfasında bir sorgu dize kullanarak varsayar. Bir çıkış istiyor ziyaretçi oturum açarsanız, onlar login.php olacak? Action = kendi url çıkış ve böylece çıkış için izin verilecektir. Değilse zaten giriş var, ve index.php (veya her yerde korumalı bölümü) doğrudan gönderilir, onlar gibi, giriş sayfasını erişmesini önlenecektir.

Giriş sayfası çıkış sayfasından ayrı ise, tüm $ _GET koşul gerekmez.

php.net : session destroy bilgilerin başka bir küçük çerez

session_destroy () geçerli oturum ile ilişkili tüm verileri yok eder. Bu oturumda, ya da unset oturum tanımlama ile ilişkili küresel değişkenlerin herhangi yoketmek değil. Tekrar oturum değişkenleri kullanmak için session_start () çağrısı yapılmalıdır.

Tamamen, oturum öldürmek dışarı kullanıcı oturum istiyorum için, session id de unset olmalıdır. Cookie session id (varsayılan davranış) yaymak için kullanılan, daha sonra oturum tanımlama silinmesi gerekir. setcookie () bunun için kullanılabilmektedir.

Unset değişken "myusername" kullanarak session_unset ()

iki sorun var aslında ... bir sayfa tarayıcıda önbelleğe edilebilir olduğunu; ikinci sayfa sunucuda önbelleğe olabilir olmasıdır. Daha çok aslında ilk biridir. En iyi yolu, Pragma sahip olmaktır: NoCache: sayfanın bölümünde no-cache (IIRC, size açıklamaya gerek; HTTP1.0 diğeri HTTP1.1 için bir, ve farklı ifadeleri gerektirir). Sen (veya en duyarlı olanlar en azından) giriş için sadece mevcut sayfalarında koymak gerekir. Bu tarayıcı sunucuya geri dönmek için neden olacaktır.

Eğer ya, diyelim ki, Zend optimizer bazı önbelleğe yaptım eğer muhtemelen bilemez - Diğer aslında, daha az olasıdır sunucu önbelleğe alma vardır. Bu sizin için session_unset veya session_is_registered kullanabilirsiniz. Ama önce Pragma deneyin.

Bazı tarayıcılar da web sayfasını devam böylece geri düğmesini o "yükler" hemen tıkladığınızda. Eğer herhangi bir diğer tarayıcıları denedim.

Page 1: while login create a session variable for user

Like: session_start(); $_SESSION['user']=$userId;

Page2: when logout unset this session variable also

session_unregister (kullanıcı); OR ($ _SESSION ['user']) unset;

Page 3: On the remaining pages where you want only logged-in user, use this type of check

if(!isset($_SESSION['user'])) { header("Location: loginPage.php"); exit(); }