簡體   English   中英

如何在PHP頁面之間共享數據?

[英]how can i share data between PHP pages?

我有一個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.'; 
    } 
} 
?> 

出於對神聖事物的熱愛, 請不要使用添加斜杠來防止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 . "'";

請注意,不贊成使用session_register()來為$ _SESSION超全局變量賦值,例如

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

還應注意,會話中存儲的任何東西,尤其是在共享服務器環境中,都是公平的游戲。 永遠不要存儲密碼,無論它是散列還是加密的。 我也避免存儲用戶名。 如果必須在使用會話變量的頁面之間使用某種身份驗證機制,則建議使用第二個查找表,例如logins ,並將用戶名,登錄時間等存儲在該表中。 該表中的哈希值存儲在會話中,每個頁面請求都會檢查表中的時間以及哈希值是否與數據庫相對應。 如果請求太舊或哈希值不匹配,請強制重新登錄。

所有這些以及更多內容都可以在會話PHP手冊部分中找到

您可能還想將“ 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';
?>

首先,您需要將session_start()放在腳本的最開始。 它還需要在每個使用會話數據的腳本的開頭執行。 因此,它也將放在babyRegistration.php的頂部。

其次,我強烈建議您不要使用session_register()因為它依賴於register_globals,出於安全原因,該寄存器默認情況下處於關閉狀態。 您可以在此處了解更多信息: http : //php.net/manual/zh/security.globals.php 您可以使用$_SESSION超全局變量來添加/訪問會話變量:

$_SESSION['kUserID'] = $kUserID;

最后,與會話沒有真正的關系,只是一個觀察,頂部的isset檢查是多余的; 就像您期望的那樣,empty將為unset / NULL變量返回true。

在頁面頂部

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

然后在其他頁面上檢索

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

哦,關於注入,請在進入數據庫的所有內容中使用它http://us3.php.net/manual/zh/function.mysql-real-escape-string.php

僅僅因為幾乎所有事情都變成了避免SQL注入。 轉義字符串不會使您免於SQL注入。 正確的方法是使用准備好的語句。 https://www.php.net/manual/zh/mysqli.quickstart.prepared-statements.php

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM