benim "beni hatırla" özelliği-

2 Cevap php

Sonunda ben çalışmak için bu işlevi var. Onun işi yapar ama gerçek dağınık, just wanna düşüncelerinizi ve ben geliştirmek, belki onların bir şey duymak görünüyor?

Teşekkürler alot!

Giriş

$result = mysql_query("SELECT * FROM users WHERE username = '".mysql_real_escape_string($_POST['username'])."' AND password = '".md5($_POST['password'])."'");
$row = mysql_fetch_object($result);

    if (mysql_num_rows($result) == 0) {
        exit('Bad Giriş');
    }

    $_SESSION['id'] = mysql_result($result, 0, 'id');

    # The user wants to be remembered
    if (isset($_POST['remember'])) {
        $key = md5(uniqid());
        setcookie('remember', $key, time()+900000);  /* expire in 10 days */
        mysql_query("UPDATE users SET sessionkey = '$key' WHERE id = ".mysql_result($result, 0, 'id'));

    }

Ve her sayfada I kontrol:

if (isset($_SESSION['id'])) {
header("Location: welcome.php");
}

elseif (isset($_COOKIE['remember'])) {

$rs = mysql_query("SELECT * FROM users WHERE sessionkey = '$_COOKIE[remember]'");

if (mysql_num_rows($rs) == 1) {
    $_SESSION['id'] = 1;
header("Location: welcome.php");
}

}

2 Cevap

Satır sayısı mysql_fetch_object($result) deyimi önce sıfır olup olmadığını denetler kodu koymak. Kullanıcı yoksa bu şekilde, bu ekstra CPU döngüsü boşa harcamayın.

(Her iki yerde de) bu değiştirin:

mysql_result($result, 0, 'id');

karşı

$row->id;

Also, if your id column isn't sanitary (i.e.: the user has entered some data for it at some point), you're going karşı want karşı escape it in your UPDATE query.

Just a matter of preference on this one, but when I check URL parameters existance, I like karşı use !empty() instead of isset. The reason is that if the parameter is set but empty, it will still return false:

!empty($_POST['remember'])

Also on that note, be sure karşı sanitize $_COOKIE['remember']. Cookie values can be changed by the user.

mysql_query("SELECT * FROM users WHERE sessionkey = '" . mysql_real_escape_string($_COOKIE[remember]) . "'");

Lastly, it might be a good idea not karşı select * in your query, as this can bump you up against a performance wall later on in your app. Consider just selecting, say, the ID of the user:

mysql_query("SELECT id FROM users ...

Her şey oldukça iyi görünüyor!

Ben PHP uzman değilim, ama oturum yönetimi için bir off-the-raf çözümü muhtemelen var - Ben kendi haddeleme bitti kullanarak öneririm.