[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: проблема с сессиями
flint
Эта страничка не работает, что-то с сессиями. Помогите пожалуйста разобраться

Когда попадаешь на эту страничку, то появляется окно авторизации с логином, паролем, после того как их вводишь, оно по идее должно переходить на страницу авторизованного пользователя, но почему-то оно не переходит, а остается там же вместе с окном авторизации снова.

<?php
session_start();
//Поключаем конфиг
include("config.inc.php");
//Необходимо подключиться к БД
$link = mysql_connect($DBSERVER, $DBUSER, $DBPASS)
or die("Can't connect" );
// сделать $DB текущей базой данных
mysql_select_db($DB, $link) or die ("Can't select BD");
//Если нет сессий



if(md5(crypt($_SESSION['user'],$_SESSION['password'])) != $_SESSION['SID']) {

//Если кнопка не нажата, отображаем форму
if(!$_POST['do']){
echo '<form name="1" action="" method="post">
email:<input name="email" type="text" value=""> <br/>
password:<input name="password" type="password" value=""> <br/>
<input name="do" type="submit" value="Login">
</form><br/><a href="reg.php"/>Registration</a>'
;
}
//Если кнопка нажата
if($_POST['do']) {
//Проверяем данные
$email = $_POST['email'];

$password = md5($_POST['password']);

if($email !='' AND $password !='') {
//Создаем запрос
$q1=mysql_query("SELECT * FROM users WHERE email='".$email."'AND password='".$password."'AND status= 1");

//Проверяем существует ли хоть одна запись
if(mysql_num_rows($q1) === 1) {
//Если есть, то создаем сессии и перенаправляем на эту страницу
$r1=mysql_fetch_array($q1);

$_SESSION['user'] = $r1['email'];
$_SESSION['password'] = $r1['password'];
$_SESSION['nick'] = $r1['nick'];

$_SESSION['SID'] = md5(crypt($r1['user'],$r1['password']));

@Header("Location: index.php");
}
else {echo 'Invalid email / password; Maybe your account is not activated<br/><a href="index.php"/>Back</a>
<br/><a href="reg.php"/>Registration</a>'
;}
}

else {echo 'type your email and password' ;}

}

else {echo '<br/><a href="lostpass.php">lost your password?</a>';}
}


else {




$q2 = @mysql_query("SELECT * FROM users WHERE nick='".$_SESSION['nick']."' AND email='".$_SESSION['user']."' AND password='".$_SESSION['password']."' AND status = 1");
if(@mysql_num_rows($q2)==1){
$r2 = @mysql_fetch_array($q2);

echo 'You are: '.ucfirst($r2['nick']).'<br/>';
echo 'Your email: '.ucfirst($r2['email']).'<br/>';
echo '<a href="index.php">Home</a> ';
echo '<a href="index.php?page=downloads">Downloads</a><br/>';
echo $_GET['page'];
if($_GET['page'] !='') {
@include("tpl/".$_GET['page'].".php");
}
else { @include("tpl/default.php");}



echo '<br/><br/><a href="index.php?exit=1">Logout</a>';
}
}

if($_GET['exit']) {@session_destroy(); unset($_GET['exit']); mysql_close($link); @Header("Location: index.php");}
?>




Спустя 30 минут, 16 секунд (19.08.2010 - 13:31) Basili4 написал(а):
перед этим делай так
print_r($_POST) будет видно что пришло
if(!$_POST['do']){

З.Ы. Сессия здесь не причем

Спустя 6 часов, 38 минут, 6 секунд (19.08.2010 - 20:09) flint написал(а):
то что ты посоветовал показывает мне то что я ввожу.
просто дело в том что если отключить строку
if(md5(crypt($_SESSION['user'],$_SESSION['password'])) != $_SESSION['SID']) {
и убрать else вот так =>
<?php
session_start();
//Поключаем конфиг
include("config.inc.php");
//Необходимо подключиться к БД
$link = mysql_connect($DBSERVER, $DBUSER, $DBPASS)
or die("Can't connect" );
// сделать $DB текущей базой данных
mysql_select_db($DB, $link) or die ("Can't select BD");
//Если нет сессий

//

//if(md5(crypt($_SESSION['user'],$_SESSION['password'])) != $_SESSION['SID']) {

//print_r($_POST);
//Если кнопка не нажата, отображаем форму

if(!$_POST['do']){
echo '<form name="1" action="" method="post">
email:<input name="email" type="text" value=""> <br/>
password:<input name="password" type="password" value=""> <br/>
<input name="do" type="submit" value="Login">
</form><br/><a href="reg.php"/>Registration</a>'
;
}
//Если кнопка нажата
if($_POST['do']) {
//Проверяем данные
$email = $_POST['email'];

$password = md5($_POST['password']);

if($email !='' AND $password !='') {
//Создаем запрос
$q1=mysql_query("SELECT * FROM users WHERE email='".$email."'AND password='".$password."'AND status= 1");

//Проверяем существует ли хоть одна запись
if(mysql_num_rows($q1) === 1) {
//Если есть, то создаем сессии и перенаправляем на эту страницу
$r1=mysql_fetch_array($q1);

$_SESSION['user'] = $r1['email'];
$_SESSION['password'] = $r1['password'];
$_SESSION['nick'] = $r1['nick'];

$_SESSION['SID'] = md5(crypt($r1['user'],$r1['password']));

@Header("Location: index.php");
}
else {echo 'Invalid email / password; Maybe your account is not activated<br/><a href="index.php"/>Back</a>
<br/><a href="reg.php"/>Registration</a>'
;}
}

else {echo 'type your email and password' ;}

}

else {echo '<br/><a href="lostpass.php">lost your password?</a>';}
//}

//else {





$q2 = @mysql_query("SELECT * FROM users WHERE nick='".$_SESSION['nick']."' AND email='".$_SESSION['user']."' AND password='".$_SESSION['password']."' AND status = 1");
if(@mysql_num_rows($q2)==1){
$r2 = @mysql_fetch_array($q2);

echo 'You are: '.ucfirst($r2['nick']).'<br/>';
echo 'Your email: '.ucfirst($r2['email']).'<br/>';
echo '<a href="index.php">Home</a> ';
echo '<a href="index.php?page=downloads">Downloads</a><br/>';
echo $_GET['page'];
if($_GET['page'] !='') {
@include("tpl/".$_GET['page'].".php");
}
else { @include("tpl/default.php");}



echo '<br/><br/><a href="index.php?exit=1">Logout</a>';
}
//}
if($_GET['exit']) {@session_destroy(); unset($_GET['exit']); mysql_close($link); @Header("Location: index.php");}
?>
то будет видно что он скрипт нас "узнает" и пропускает далее к скрытым ссылкам (вобщемто дело не в ссылках это не суть важно просто нужен вроде личного кабинета что то)

так вот
$_SESSION['SID'] = md5(crypt($r1['user'],$r1['password']));


создает сессию но почему она не проходит проверки по этому скрипту ???
if(md5(crypt($_SESSION['user'],$_SESSION['password'])) != $_SESSION['SID']) {


написал много но это чтоб облегчить понимания сути моей проблемы спасибо что прочли =)

Спустя 1 час, 5 минут, 29 секунд (19.08.2010 - 21:14) linker написал(а):
print_r($_SESSION); и все станет понятно. Версия PHP какая?
Обожаю такие конструкции
include ("tpl/" . $_GET['page'] . ".php")

Спустя 17 минут, 55 секунд (19.08.2010 - 21:32) flint написал(а):
версия 5.2.13

Спустя 21 минута, 26 секунд (19.08.2010 - 21:54) linker написал(а):
Тогда нормально, но print_r($_SESSION) что дает?

Спустя 7 минут, 6 секунд (19.08.2010 - 22:01) flint написал(а):
Array ( [user] => email@email.com [password] => 202cb962ac59075b964b07152d234b70 [nick] => user [SID] => 2d2caef08d6684a5c6212b4c09494aef )


Спустя 21 минута, 19 секунд (19.08.2010 - 22:22) flint написал(а):
щас проанализировал результаты я кажется нашел в чем проблема :
if(md5(crypt($_SESSION['user'],$_SESSION['password'])) != $_SESSION['SID']) {


в этой строке хоть $_SESSION['user'] и $_SESSION['password'] берутся верные но после функции md5(crypt($_SESSION['user'],$_SESSION['password'])) он не соответствует $_SESSION['SID']


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

Спустя 22 минуты, 25 секунд (19.08.2010 - 22:45) flint написал(а):
нашел в чем была проблема проблема была действительно в строке
if(md5(crypt($_SESSION['user'],$_SESSION['password'])) != $_SESSION['SID']) {


здесь нехватало скобок
вот верный вариант
if((md5(crypt($_SESSION['user'],$_SESSION['password']))) != $_SESSION['SID']) {


Всем большое спасибо за ответы
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.