Записване на сесията във база данни

nasibg

Registered
Как ще стане записването на сесията във базата данни? че нищо не ми идва на ъкъла... Защото искам да се предпазя от хайджакинк(открадване на сесията). и до колкото знам, когато сесията се записва във DB не се използва session_start(); Просто не ми е ясно.... Надявам се да има, такива които могат да помогнат. :) +1
 
Сещам се за този вариант и предполагам е най-лесния. Надявам се да го разбереш.

Код:
CREATE TABLE `users` (
`username` VARCHAR(32) NOT NULL,
`password` VARCHAR(32) NOT NULL,
`session` VARCHAR(32) NOT NULL,
UNIQUE (`username`)
);
INSERT INTO `users` (`username`, `password`, `session`) VALUES ('nasibg', 'nasibgpassword', '');

index.php
Код:
<?php
include ("config.php");
<form action="" method="POST">
Име:<br />
<input type="text" name="username"/><br />
Парола:<br />
<input type="password" name="password"/><br />
<input type="submit" value="Влез"/>
</form>
<?php
if($_POST['submit']){
session_start();//създаваме сесията
$ses = session_id();//$ses ще бъде като "индивидуална" сесия на потребителя
$username = $_POST['username'];
$password = $_POST['password'];

$query = mysql_query("SELECT * FROM `users` WHERE session='$ses'"); //Проверяваме дали потребителя е логнат
$red = mysql_num_rows($query);
if ($red != NULL) {
	$my_username = $red['username'];
		echo "Вие сте си в профила с потребителско име: $my_username<br /><a href='logout.php'>Изход</a>";
}
else {
$query2 = mysql_query("SELECT * FROM `users` WHERE username='$username'"); //ако не си е в профила.. проверяваме дали потребителя го има в базата
$row = mysql_num_rows($query2);
if ($row != NULL) {
	$query3 = mysql_query("SELECT * FROM `users` WHERE username='$username' AND password='$password'"); //ако всичко е наред при горната заявка проверяваме и паролата
$row2 = mysql_num_rows($query3);
if ($row2 != NULL) {
	$query4 = mysql_query("UPDATE `users` SET session='$ses' WHERE username='$username' AND password='$password'"); //ако вече всичко е наред, ще излезне долния резултат, защото сме записали новата сесия на потребителя
		echo "Добре дошъл <b>$username</b>!<br /><a href='logout.php'>Излез</a>";
}
else{
	echo "Грешна парола за потребител: <b> $username</b> !";
}}
else{
	echo "Няма такъв потребител !";
}}}
?>

proba.php
Код:
<?php
session_start();
$ses = session_id();
include ("config.php");

$query = mysql_query("SELECT * FROM `users` WHERE session='$ses'");
$red = mysql_num_rows($query);
if ($red != NULL) {
	$my_username = $red['username'];
	echo "Вие сте влезнали с потребител: $my_username <br /><a href='logout.php'>Излез</a>";
}
else {
	echo "Трябва да се логнете !";
}
?>

Когато се логнеш в профила ти тоест с потребител: nasibg и парола: nasibgpassword

Влезни тук: proba.php и би трябвало да си влезеш в профила, след което провери в таблица, която създаде по-горе т.е. `users` колона: session и там ще ти бъде записана сесията. :?:

logout.php
Код:
<?php
session_start();
$ses = session_id();
include ("config.php");

$query = mysql_query("SELECT * FROM `users` WHERE session = '$ses'");
$row = mysql_num_rows($query);
if ($row != NULL) {
	$username = $row['username'];
mysql_query("UPDATE `users` SET session='' WHERE username = '$username'");
	session_unset();
	session_destroy(); 
	echo "Излязохте успешно";
}
else{
	echo "Не сте логнат";
}
?>
 
Аха значи цялата философия основно е session_id(); другото вече си е логика, ясно. :) Но когато влезна във index.php и въведа коректно данните, нищо не се случва, нищо не показва.. влизам във proba.php само ми казва - Трябва да се логнете ! ...
 
Бях пропуснал
Код:
name="submit"

Промени index.php на:
Код:
<?php
session_start();//създаваме сесията
include ("config.php");
?>
<form action="" method="POST">
Име:<br />
<input type="text" name="username"/><br />
Парола:<br />
<input type="password" name="password"/><br />
<input type="submit" name="submit" value="Влез"/>
</form>
<?php
if(isset($_POST['submit'])){
$ses = session_id();//$ses ще бъде като "индивидуална" сесия на потребителя
$username = $_POST['username'];
$password = $_POST['password'];

$query = mysql_query("SELECT * FROM `users` WHERE session='$ses'"); //Проверяваме дали потребителя е логнат
$red = mysql_num_rows($query);
if ($red != NULL) {
   $my_username = $red['username'];
      echo "Вие сте си в профила с потребителско име: $my_username<br /><a href='logout.php'>Изход</a>";
}
else {
$query2 = mysql_query("SELECT * FROM `users` WHERE username='$username'"); //ако не си е в профила.. проверяваме дали потребителя го има в базата
$row = mysql_num_rows($query2);
if ($row != NULL) {
   $query3 = mysql_query("SELECT * FROM `users` WHERE username='$username' AND password='$password'"); //ако всичко е наред при горната заявка проверяваме и паролата
$row2 = mysql_num_rows($query3);
if ($row2 != NULL) {
   $query4 = mysql_query("UPDATE `users` SET session='$ses' WHERE username='$username' AND password='$password'"); //ако вече всичко е наред, ще излезне долния резултат, защото сме записали новата сесия на потребителя
      echo "Добре дошъл <b>$username</b>!<br /><a href='logout.php'>Излез</a>";
}
else{
   echo "Грешна парола за потребител: <b> $username</b> !";
}}
else{
   echo "Няма такъв потребител !";
}}}
?>
 

Back
Горе