2010-02-24 98 views
0

我有一個PHP頁面,我想分享像UserID,密碼這樣的頁面之間的一些數據。我如何在PHP頁面之間共享數據?

我正在學習會話,我不知道我是否正確使用它。

<?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.'; 
    } 
} 
?> 
+0

橙色,請清理您的代碼段從所有不相干的東西剝開它,並告訴我們你想與會話做的正是有太多的代碼,它不是縮進很好 - 沒有樂趣找出你想在這裏做什麼 – 2010-02-24 01:25:54

+0

好吧,我做了你問什麼 我怎麼能在頁面之間共享數據 – orange 2010-02-24 01:37:07

回答

13

對於所有聖潔的愛,don't use addslashes to prevent SQL injection

我擁有你的網站:

Image of your ownt site http://localhostr.com/files/8f996b/Screen+shot+2010-02-23+at+7.49.00+PM.png

編輯:更糟。

我只注意到你試圖通過addslashes來阻止注入,甚至沒有被使用!

<?php 
$kUserID = $_POST['kUserID']; 
$user = addslashes($_POST['kUserID']); // this isn't used 
$sqlQuery = "select * from allowedUsers where UserID='" 
    . $kUserID . "' AND passwordID='" . $kPassword . "'"; 
+0

所以,將使用添加數據到數據庫中。一個SQL注入攻擊,然後通過相同的機制計數在另一頁上檢索它作爲一種可行的方式來保存頁面之間的數據?Yikes。代碼被張貼在這裏的好東西伯爵年。 – TheJacobTaylor 2010-02-24 03:36:30

+0

這裏是功能的鏈接,你應該使用,而不是和addslashes http://php.net/manual/en/function.mysql-real-escape-string.php – Jayrox 2010-02-24 05:11:37

4

注意了session_register()贊成,$ _SESSION全局,例如指定值的被棄用

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

另外請注意,存儲在會話中,尤其是在共享服務器環境中的任何內容都是公平的遊戲。不要存儲密碼,不管它是否被散列或加密。我也會避免存儲用戶名。如果您必須在使用會話變量的頁面之間使用某種身份驗證機制,那麼我建議您使用第二個查找表,例如logins,並在該表中存儲用戶名,登錄時間等。來自該表的散列值被存儲在會話中,並且每個頁面請求檢查表中的時間以及針對數據庫的散列值。如果請求太舊或哈希不匹配,請強制重新登錄。

PHP manual section on sessions中可以使用所有這些和更多功能。

1

首先,您需要在腳本的開頭放置session_start()。它還需要在每個使用會話數據的腳本開始時進行。所以它也會在babyRegistration.php的頂部。

其次,我強烈建議不要使用session_register(),因爲它依賴於默認情況下由於安全原因而關閉的register_globals。你可以在這裏閱讀更多:http://php.net/manual/en/security.globals.php。您可以通過使用添加/訪問會話變量$_SESSION超全局:

$_SESSION['kUserID'] = $kUserID; 

最後,真的沒有會話相關的,只是一個觀察,在頂部您isset檢查是多餘的;正如你所期望的那樣,empty將會爲unset/NULL變量返回true。

0

在頁面的頂部

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

然後其他一些網頁上檢索

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

哦,關於注射,使用一切進入你的數據庫 http://us3.php.net/manual/en/function.mysql-real-escape-string.php

+0

@dperry>很好的例子,但沒有這樣的功能sessionStart()。 – bdl 2010-02-24 15:16:29

+0

請停止提倡使用舊的mysql函數。教新人正確的方式與PDO做事http://php.net/pdo – Kris 2010-02-25 23:49:26

+0

我個人使用mysqlli http://us.php.net/manual/en/class.mysqli.php所以在那種情況下,它會是 $ mysql_li_instance-> real_escape_string($ value); 相同的概念,雖然經過所有傳入的字符串通過real_escape_string過濾 – 2010-02-28 01:26:02

2

您可能還想將「database.inc」重命名爲「database」。 inc.php「,或者正確設置你的主機來對待」。公司」爲PHP:。

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

<?php 
    $sDatabase = 'shayaanpsp'; 
    $sHostname = 'mysql5.brinkster.com'; 
    $sPort  = 3306; 
    $sUsername = 'shayaanpsp'; 
    $sPassword = 'XXXX'; 
    $sTable = 'allowedUsers'; 
?> 
+0

LOL的。他的密碼也在我的密碼字典中。 – hobodave 2010-02-25 05:17:36