Помощ за Автом. влизане

CeVo

Registered
Някой можели да ми помогне с формата за Remember me, моля прибавете кода за формата в тази логин форма
login.php
Код:
<?
session_start();
include "config.php";
$username = $_SESSION['logged'];
?>
<center>
  <form method="post">
      <p><input type="text" name="username" value='Потребител ...' class='user' onclick='this.value=""' /></p>
      <p><input type="password" name="password" value='Парола ...' class='pass' onclick='this.value=""' /></p>
	<p><div style="width: 140px; border: 1px solid #a7a7a7;">
	<input type="submit" name="login" value="Вход" style="cursor: pointer; margin: -1px; margin-left: -10px; border-right: 1px solid #a7a7a7;" /> 
	<input type="checkbox" checked="checked" disabled="disabled" />Запомни ме</div></p>
  </form>
</center>
<?php 
if ($_POST['login']) {
$username = $_POST['username'];
$password = md5($_POST['password']);
$info = mysql_query("SELECT * FROM users WHERE username = '$username'") or die(mysql_error());
$data = mysql_fetch_array($info);
if($data[password] != $password) {
echo "<div class='error'>Грешен потребител или парола!</div>";
}else{
$_SESSION['logged'] = $data[username];
header("Location: ".$_SERVER['HTTP_REFERER']."");
}
} 
?>
 
Идеята на "Запомни ме" е да се даде възможност на потребителя да се логне автоматично след като вече веднъж е напуснал сайта. За целта, при първото логване, и само ако е чекнат бокса "Запомни ме", слагаме cookie на компютъра на потребителя. Когато се върне отново и се опита да достъпи в зона за регистрирани потребители, логично го препращаме към логин формата, но там ще добавиме и проверка за това cookie и неговата стойност и при успех ще го логнеме автоматично без да се налага да пише отново потребителското си име и парола.

1. Като за начало, променяме малко чекбокса. Елементите с атрибут dissabled не се изпращат от браузъра към сървъра!!! А не си му дал и име.

старата версия:
Код:
<input type="checkbox" checked="checked" disabled="disabled" />Запомни ме

новата версия:
Код:
<input type="checkbox" checked="checked" name="remember_me" />Запомни ме

2. Към проверката дали формуляра е изпратен добавяме и проверка дали има cookie и взимаме съответните стойности:

Код:
if($_POST['login']){
      $username = $_POST['username'];
      $password = md5($_POST['password']); 
}elseif($_COOKIE['auto_login']){

      $auto_login = unserialize($_COOKIE['auto_login']);

      $username = $auto_login['username'];
      $password = $auto_login['password'];
}

if(!empty($username) && !empty($password)){
   $info = mysql_query("SELECT * FROM users WHERE username = '$username'") or die(mysql_error());
   $data = mysql_fetch_array($info);

   if($data[password] != $password) {
        echo "<div class='error'>Грешен потребител или парола!</div>";
   }else{
        $_SESSION['logged'] = $data[username];

        header("Location: ".$_SERVER['HTTP_REFERER']."");

        if(isset($_POST['remember_me'])){

           $login_data = serialize(array('username'=>$_POST['username'], 'password'=>$password));

            setcookie('auto_login', $login_data, strtotime('+1 MONTH'));
        }

    } 
}


Паролата в случая присъства в кукито в md5 кодиран вид, колкото за примера е приемливо, но има начин да го направиш още по-сигурно и въобще да не се знае какво има (какво показва) стойността на кукито.
 
Благодаря ти.Сега си работи всичко перфектно, а можели кода за logout.php, че немога да се излизам от профила си.
 
бтв аз само не разбрах един път като се логне и после като влезе ше трябва ли да минава през login.php за да се логне автоматично???
 
RE: а можели кода за logout.php, че немога да се излизам от профила си.

Ето два варианта за logout:

Код:
//първи вариант - унищожаваме ключа auto_login от глобалния COOKIE масив
unset($_COOKIE['auto_login']);

//втори вариант (може би по-правилен) - презаписваме кукито със същото име и стойност, но с изтекла дата на валидност (дата в миналото)
setcookie('auto_login', $_COOKIE['auto_login'], strtotime('-1 MONTH'));

RE: бтв аз само не разбрах един път като се логне и после като влезе ше трябва ли да минава през login.php за да се логне автоматично

В примера по-горе, кукито е с валидност от един месец, т.е. от деня на логване, потребителя ще може един месец да си влиза автоматично, без да вижда логин формата и т.н. Но след този един месец, кукито вече ще бъде невалидно и системата ще го пренасочи към логин формата. Когато създаваш кукито, можеш да му укажеш неограничено дълъг срок. Друг начин на удължаване на валидността е при всяко посещение да сетваш същото куки, със същата стойност, но за още един месец (или друг произволен интервал). Стойността трябва да е във формат Unix timestamp - time() + брой секунди.
 

Back
Горе