Как я могу обмениваться данными между страницами PHP? - PullRequest
0 голосов
/ 24 февраля 2010

У меня есть страница PHP, и я хочу поделиться некоторыми данными между страницами, такими как UserID, пароль.

Я узнаю о сессиях и не уверен, правильно ли я их использую.

<?php
require_once('database.inc');
$kUserID = $_POST['kUserID'];
$kPassword = $_POST['kPassword'];

if (!isset($kUserID) || !isset($kPassword)) { 
    header( "Location: http://domain/index.html" ); 
}

elseif (empty($kUserID) || empty($kPassword)) { 
    header( "Location: http://domain/index.html" ); 
} 
else { 
    $user = addslashes($_POST['kUserID']); 
    $pass = md5($_POST['kPassword']); 
    $db = mysql_connect("$sHostname:$sPort", $sUsername, $sPassword) or die(mysql_error()); 
    mysql_select_db($sDatabase) or die ("Couldn't select the database."); 
    $sqlQuery = "select * from allowedUsers where UserID='" . $kUserID . "' AND passwordID='" . $kPassword . "'";
    $result=mysql_query($sqlQuery, $db);
    $rowCheck = mysql_num_rows($result); 
    if($rowCheck > 0){ 
        while($row = mysql_fetch_array($result)){
            session_start();
            session_register('kUserID'); 
            header( "Location: link.php" );
       } 
    } 
    else { 
        echo 'Incorrect login name or password. Please try again.'; 
    } 
} 
?> 

Ответы [ 5 ]

13 голосов
/ 24 февраля 2010

Ради любви ко всему святому, не используйте надстрочные знаки для предотвращения SQL-инъекций .

Я только что владел вашим сайтом:

Изображение вашего сайта http://localhostr.com/files/8f996b/Screen+shot+2010-02-23+at+7.49.00+PM.png

Редактировать : еще хуже.

Я только что заметил, что вы пытаетесь предотвратить инъекцию через аддлэш, даже не используется!

<?php
$kUserID = $_POST['kUserID'];
$user = addslashes($_POST['kUserID']); // this isn't used
$sqlQuery = "select * from allowedUsers where UserID='"
  . $kUserID . "' AND passwordID='" . $kPassword . "'";
4 голосов
/ 24 февраля 2010

Имейте в виду, что session_register () устарела в пользу присвоения значений суперглобальному $ _SESSION, например,

<?php
    $_SESSION['hashedValue']= '437b930db84b8079c2dd804a71936b5f';
?>

Также следует помнить, что все, что хранится в сеансе, особенно в среде общего сервера, является честной игрой. Никогда не храните пароль, независимо от того, зашифрован он или зашифрован. Я бы не стал хранить имя пользователя. Если вам необходимо использовать какой-либо механизм аутентификации между страницами с использованием переменной сеанса, я бы порекомендовал использовать вторую справочную таблицу, например, logins и сохраните имя пользователя, время входа и т. Д. В эту таблицу. Хешированное значение из этой таблицы сохраняется в сеансе, и каждый запрос страницы проверяет время в таблице и хешированное значение в базе данных. Если запрос слишком старый или хеш не совпадает, принудительно выполните повторный вход.

Все это и многое другое доступно вам в разделе руководства PHP по сессиям .

2 голосов
/ 24 февраля 2010

Вы также можете переименовать «database.inc» в «database.inc.php» или правильно настроить свой хост для обработки «.inc» как PHP:

http://www.namemybabyboy.com/database.inc

<?php
    $sDatabase = 'shayaanpsp';
    $sHostname = 'mysql5.brinkster.com';
    $sPort     = 3306;
    $sUsername = 'shayaanpsp';
    $sPassword = 'XXXX';
    $sTable    = 'allowedUsers';
?>
1 голос
/ 24 февраля 2010

Во-первых, вам нужно поставить session_start() в самом начале вашего скрипта. Это также должно идти в начале каждого сценария, который использует данные сеанса. Так что это также будет идти вверху babyRegistration.php.

Во-вторых, я бы настоятельно рекомендовал не использовать session_register(), поскольку он полагается на register_globals, которая по умолчанию отключена по соображениям безопасности. Вы можете прочитать больше здесь: http://php.net/manual/en/security.globals.php. Вы можете добавить / получить доступ к переменным сеанса, используя $_SESSION superglobal:

$_SESSION['kUserID'] = $kUserID;

Последнее, не связанное с сессией, просто наблюдение, ваша проверка isset вверху избыточна; empty будет возвращать true для переменной unset / NULL, как и следовало ожидать.

0 голосов
/ 24 февраля 2010

Вверху страницы

session_start();
$_SESSION['yourvarname']='some value';

затем на другой странице, чтобы получить

echo $_SESSION['yourvarname'];
// some value

О, и насчет инъекций, используйте это для всего, что входит в вашу базу данных http://us3.php.net/manual/en/function.mysql-real-escape-string.php

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...