2011-12-30 3 views
0

делая простой вход для моего сайта, который мы надеемся сохранить пользователю войти в систему в течение определенного периода времени, сценарии выглядит следующим образом:Сессии в PHP, войдите скрипт

<?php 


/* $con make a connection with database */ 
mysql_connect("localhost","root",""); 

//select database 
mysql_select_db("blogass"); 

/* Below two commands will store the data in variables came from form input */ 
$username=$_POST['username']; 
$password=$_POST['password']; 


/* below two commands are sql injection which stops extra characters as input */ 
$user=mysql_real_escape_string($username); 
$pass=mysql_real_escape_string($password); 

$query=mysql_query("SELECT * FROM users where 
username='$username' AND 
password='$password' "); 

$count=mysql_num_rows($query); 
if($count==1) 
/* $count checks if username and password are in same row */ 
{ 
echo "Login Successful"; 
$hour = time() + 3600; 

} 
else 
{ 
echo "Username or password is incorrect"; 
} 
?> 

Im возникли проблемы сдачи сессии в, я знаю его простой, но я наклоняю пальцем на него! я хочу, чтобы он отображал, что вошел в систему на моей странице index.php, и если никто не вошел в систему, чтобы отобразить сообщение с просьбой войти в систему/зарегистрироваться. В основном я хочу, чтобы пользователь оставался в системе в течение всего времени, которое они находятся на сайте. Любые идеи о том, что я делаю неправильно?

+2

Вы должны ознакомиться с [session_start] (http://php.net/ manual/en/function.session-start.php) – danihp

ответ

1

После Логин и пароль аутентификации:

$query=mysql_query("SELECT * FROM users where username='$username' AND password='$password' "); 

$count=mysql_num_rows($query); 
if($count==1) 
/* $count checks if username and password are in same row */ 
{ 
echo "Login Successful"; 
$hour = time() + 3600; 
         <--- PUT HERE INSTRUCTION BELOW 
} 

Вы должны хранить имя пользователя в переменной в $ _SESSION, когда вы убедитесь, что он проходит проверку подлинности:

$_SESSION['user'] = $username; 

В начале всех других страниц, которые вы должны поставить команду

session_start(); 

, а затем использовать статут if, чтобы проверить, сессии переменная пользователя установлена:

<?php 

if(isset($_SESSION['user'])){ 

?> 

//HTML of page if user is authenticated 

<?php 

}else{ 

?> 

//HTML of page if user is authenticated 

<?php 


} 

?> 
+0

@Volvic Я отредактировал свой ответ, чтобы соответствовать вашему вопросу, проверьте, хорошо ли это! – Matteo

+0

Я добавил сессию в, я проверил, что она сработала, поскольку на экране появится «welcome (username)», после того как я нажму кнопку входа. Когда я вернусь и перейду на домашнюю страницу, я попытался восстановить имя пользователя, у меня возникли проблемы с получением переменной сеанса на других страницах! Имея кошмар с этим, чувствуйте себя настолько глупым ха-ха! –

+0

Volvic :) После успешного входа в систему необходимо перенаправить на свою * домашнюю страницу. Используйте «header» («URL вашей домашней страницы») или Javascript для перенаправления на вашу домашнюю страницу *. Каким образом вы попытались получить имя пользователя, сохраненное в сеансе? – Lion

1

В верхней части вашего сценария должен быть session_start().

Затем, после успешного входа, установите, скажем, $_SESSION['user'] = array('login'=>'john', 'level'=>1);.

Затем просто проверяйте массив сеанса и соответствующим образом изменяйте свой текстовый результат.

1

Во-первых, в верхней части файла вызова session_start(), затем поместить любые переменные, которые вы хотите в сессии в $_SESSION супер-глобальной.

Например, если вы хотите сохранить имя пользователя,

$_SESSION['username'] = $username; 

Затем на другой странице, вызовите session_start() снова, и вы можете получить доступ к $_SESSION['username']!

1

Вы должны будете использовать session_start(); в любое время, когда вам нужно получить доступ или хранить информацию в переменной сеанса. Затем вы можете назначить переменные сеанса для суперклапана $_SESSION[].

Вы можете назначить переменные, как:

$_SESSION['variable_name'] = "You can use strings, numbers, booleans, etc here.";

Отъезд PHP Manual on Sessions.

1

Возможно, вы захотите изменить свой код следующим образом.

<?php 
/* $con make a connection with database */ 
mysql_connect("localhost","root",""); 

session_start(); //Add this. 
//select database 
mysql_select_db("blogass"); 

/* Below two commands will store the data in variables came from form input */ 
$username=$_POST['username']; 
$password=$_POST['password']; 


/* below two commands are sql injection which stops extra characters as input */ 
$user=mysql_real_escape_string($username); 
$pass=mysql_real_escape_string($password); 

$query=mysql_query("SELECT * FROM users where 
username='$username' AND 
password='$password' "); 

$count=mysql_num_rows($query); 
if($count==1) 
/* $count checks if username and password are in same row */ 
{ 
    echo "Login Successful"; 
    $hour = time() + 3600; 
    $_SESSION['username'] = $username; //Add this. 

} 
else 
{ 
    echo "Username or password is incorrect"; 
} 
?> 

В PHP, вы должны начать сеанс первого с помощью функции session_start(), прежде чем использовать, уничтожить или отключенное сессию в вашем PHP скрипт.

+0

Вероятно, не стоит устанавливать '$ _SESSION ['username']' до тех пор, пока не будет проверена пара паролей имени пользователя. В противном случае он может получить ошибку, в которой вы вошли в систему, правильно ли вы получили пароль. – Paulpro

+0

@ user1 :) Соответственно исправлено. – Lion

1

Вы можете сохранить все материалы сеанса в массиве, как в приведенном выше коде, а затем проверить наличие массива.

При установке массива:

$_SESSION['user'] = array(
    'isAuth' => true, 
    'login' => 'john', 
    'lname' => 'Smith', etc etc 

); 

Затем проверьте на каждой странице этой сессии вар:

session_start(); //before headers are called 
if(!isset($_SESSION['user']) || $_SESSION['user']['isAuth'] !== true){ 
    //redirect them to a login page 
    header('Location: /login_page.php'); 
} 

//auth content here... 
Смежные вопросы