Получить идентификатор пользователя при входе - PullRequest
1 голос
/ 12 декабря 2011

Попытка сохранить $_SESSION['uID'] в течение сеанса для использования для таких функций, как получение последних заказов и т. Д.

У меня есть несколько файлов:

** login / index.php ** - Это страница, которую пользователи посещают для входа в систему (она же вводит пользователя / пароль), которая включает в себя несколько разметок html и этот php:

<?php
session_start();

require_once('../inc/db/dbc.php');
?>

check_buyer.php - вызывается, когда пользователь посещает login / index.php и вводит учетные данные.В этом файле после ввода правильных учетных данных будут храниться $_SESSION переменные с использованием функции: validateUser{}

  <?php
session_start(); #recall session from index.php where user logged include()

function isLoggedIn()
{
    if(isset($_SESSION['valid']) && $_SESSION['valid'])
        header( 'Location: buyer/' ); # return true if sessions are made and login creds are valid
    echo "Invalid Username and/or Password";  
    return true;
}

require_once('../inc/db/dbc.php');

$connect = mysql_connect($h, $u, $p) or die ("Can't Connect to Database.");
mysql_select_db($db);

$LoginUserName = $_POST['userName'];
$LoginPassword = mysql_real_escape_string($_POST['userPass']);
//connect to the database here
$LoginUserName = mysql_real_escape_string($LoginUserName);
$query = "SELECT uID, uUPass, dynamSalt, uUserType FROM User WHERE uUName = '$LoginUserName';";

$result = mysql_query($query);
if(mysql_num_rows($result) < 1) //no such USER exists
{
    echo "Invalid Username and/or Password";
}
$ifUserExists = mysql_fetch_array($result, MYSQL_ASSOC);

function validateUser() {
    $_SESSION['valid'] = 1;
    $_SESSION['uID'];
    $_SESSION['uUserType'] = 1; // 1 for buyer - 2 for merchant
}

$dynamSalt = $ifUserExists['dynamSalt'];  #get value of dynamSalt in query above
$SaltyPass = hash('sha512',$dynamSalt.$LoginPassword); #recreate originally created dynamic, unique pass

if($SaltyPass != $ifUserExists['uUPass']) # incorrect PASS
{
    echo "Invalid Username and/or Password";
}

else {
validateUser();
}
// If User *has not* logged in yet, keep on /login
if(!isLoggedIn())
{
    header('Location: index.php');
    die();
}
?>

Если все данные для входа в систему в порядке, он перенаправляется на / логин / покупатель / индекс.php

 <?php
session_start();
if($_SESSION['uUserType'] != 1) // error
{ 

    die("
    <div class='container_infinity'>
        <div class='container_full' style='position:static;'>
        <img src='img/error/noAccess.png' style='float:left;' /> <br />
        <h2>403 Error: You may not view this page. Access denied.</h2>
        </div>
    </div>
    ");
}

function isLoggedIn()
{
    return ($_SESSION['valid'] == 1 && $_SESSION['uUserType'] == 1);
}

//if the user has not logged in
if(!isLoggedIn())
{
    header('Location: ../index.php');
    die();
}
?>

<?php 
    if($_SESSION['valid'] == 1 && $_SESSION['uUserType'] == 1){
        #echo "<a href='../logout.php'>Logout</a>";
        echo 'buyerid: '.$_SESSION['uID'];
        require_once('buyer_profile.php');
    }
    else{
        echo "<a href='../index.php'>Login</a>";
    }
?>

Когда он достигает /login/buyer/index.php, сейчас я ПРОСТО пытаюсь вывести идентификатор пользователя, известный как $buyerUserID;, созданный обратно в файл check_buyer.php.Почему это не приносит никакой ценности?На всех страницах тоже есть session_start(); вверху

Ответы [ 3 ]

1 голос
/ 12 декабря 2011

Вы не устанавливаете $ _SESSION ['uID'] в любом месте в check_buyer.php

Также обратите внимание, что isLoggedIn () всегда возвращает true и что вызовы header не остановят ваш код,так что даже если вы вошли в систему, isLoggedIn () продолжится и пользователь в конечном итоге будет перенаправлен на index.php

1 голос
/ 12 декабря 2011

Вам необходимо установить $_SESSION['uID'] = $ifUserExists['uID']; в процессе входа в систему.

EDIT:

Тогда в php-скрипте покупателя вам нужно вывести $_SESSION['uID'] вместо $buyerUserId

<?php
session_start(); #recall session from index.php where user logged include()

function isLoggedIn()
{
    if(isset($_SESSION['valid']) && $_SESSION['valid'])
        header( 'Location: buyer/' ); # return true if sessions are made and login creds are valid
    echo "Invalid Username and/or Password";  
    return true;
}

require_once('../inc/db/dbc.php');

$connect = mysql_connect($h, $u, $p) or die ("Can't Connect to Database.");
mysql_select_db($db);

$LoginUserName = $_POST['userName'];
$LoginPassword = mysql_real_escape_string($_POST['userPass']);
//connect to the database here
$LoginUserName = mysql_real_escape_string($LoginUserName);
$query = "SELECT uID, uUPass, dynamSalt, uUserType FROM User WHERE uUName = '$LoginUserName';";

$result = mysql_query($query);
if(mysql_num_rows($result) < 1) //no such USER exists
{
    echo "Invalid Username and/or Password";
}
$ifUserExists = mysql_fetch_array($result, MYSQL_ASSOC);

function validateUser() {
    $_SESSION['valid'] = 1;
    $_SESSION['uID'] = (isset($ifUserExists['uID'])) ? $ifUserExists['uID'] : null;
    $_SESSION['uUserType'] = 1; // 1 for buyer - 2 for merchant
}

$dynamSalt = $ifUserExists['dynamSalt'];  #get value of dynamSalt in query above
$SaltyPass = hash('sha512',$dynamSalt.$LoginPassword); #recreate originally created dynamic, unique pass

if($SaltyPass != $ifUserExists['uUPass']) # incorrect PASS
{
    echo "Invalid Username and/or Password";
}

else {
validateUser();
}
// If User *has not* logged in yet, keep on /login
if(!isLoggedIn())
{
    header('Location: index.php');
    die();
}
?>


<?php
session_start();
if($_SESSION['uUserType']!=1) // error
{ 

    die("
    <div class='container_infinity'>
        <div class='container_full' style='position:static;'>
        <img src='img/error/noAccess.png' style='float:left;' /> <br />
        <h2>403 Error: You may not view this page. Access denied.</h2>
        </div>
    </div>
    ");
}

function isLoggedIn()
{
    return ($_SESSION['valid'] = 1 && $_SESSION['uUserType'] = 1);
}

//if the user has not logged in
if(!isLoggedIn())
{
    header('Location: ../index.php');
    die();
}
?>

<?php 
    if($_SESSION['valid'] == 1 && $_SESSION['uUserType'] == 1){
        #echo "<a href='../logout.php'>Logout</a>";
        echo 'buyerid: '.$_SESSION['uID'];
        require_once('buyer_profile.php');
    }
    else{
        echo "<a href='../index.php'>Login</a>";
    }
?>
1 голос
/ 12 декабря 2011
function isLoggedIn()
{
    return ($_SESSION['valid'] = 1 && $_SESSION['uUserType'] = 1);
}

в buyer/index.php всегда возвращает TRUE.Возможно, вы имели в виду:

function isLoggedIn()
{
    return ($_SESSION['valid'] == 1 && $_SESSION['uUserType'] == 1);
}

Также:

<?php 
    if($_SESSION['valid'] == 1 && $_SESSION['uUserType'] = 1){

Может быть

<?php 
    if($_SESSION['valid'] == 1 && $_SESSION['uUserType'] == 1){

Вам следует уделять больше внимания проверке на равенство (==) и назначению(=)

...